简体   繁体   中英

Entity Framework v4 -> need some help with POCO's and Entities

I'm using EF4 and I've got two entities that I wish to map to the same POCO . I'm not sure how I can do this.

Entity 1 → Foo (this represents a table FOO in the db)
POCO → Foo

Entity 2 → FooView (this represents a view FooView in the db)
POCO → Foo

I understand that I need to do something like

IObjectSet<Foo> _foos = CreateObjectSet<Foo>();

// Note spelling of the Entity.
IObjectSet<Foo> _foosView = CreateObjectSet<Foo>("FooViews"); 

But when i try this, it does compile, but it fails with the following exception:

System.ArgumentException: System.ArgumentException: The specified entity type, 'MyProject.Core.Foo', does not match the type 'EntityFramework.SqlServerModel.FoosView' from the EntitySet 'FoosViews'.

Any suggestions?

Here is a checklist of things to look for:

  1. Your Storage Model should have:
    1. Two EntitySets : Foo and FooView
    2. Two EntityTypes : Foo and FooView
  2. Your Conceptual Model should have:
    1. Two EntitySets : Foo and FooView - both with an EntityType set to ModelName.Foo
    2. One EntityType : Foo
  3. Your Mapping should have two EntitySetMappings :
    1. Foo with one EntityTypeMapping ("ModelName.Foo") with one MappingFragment ("Foo")
    2. FooView with one EntityTypeMapping ("ModelName. Foo ") with one MappingFragment ("FooView")

You should new be able to execute the following:

Foo foo = new ModelEntities()
    .CreateObjectSet<Foo>("FooView")
    .First();

You can give yourself a headstart by doing the following:

  1. Add Foo and FooView to your model
  2. In the Mapping Details of Foo click Add a Table or View and select FooView
  3. Delete FooView from your model
  4. Save the model and open it in the XML editor
  5. ( pre-RTM ) Find <EntityType Name="FooView"> in <StorageModels> and remove any incorrect entries from <Key> (it should match <EntityType Name="Foo"> )
  6. Remove the <EntityTypeMapping Name="IsTypeOf(Foo)" /> and <EntityTypeMapping Name="IsTypeOf(FooView)" /> (they caused me errors)

As of beta 2, implementing the above will break the designer

In NHibernate, one should solve this using Projections. So, I think that there must exists something similar like that in the Entity Framework. I've googled a bit, and I came accross this:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM