2010-01-03 61 views
4

我使用EF4,我有兩個實體,我希望映射到相同POCO。我不知道我該如何做到這一點。實體框架v4 - >需要一些POCO和實體幫助

實體1→美孚(這表示在db表FOO)
POCO→富

實體2→FooView(這表示在DB的圖FooView)
POCO→富

我明白,我需要做的是這樣

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

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

但是當我嘗試這一點,它編譯,但它無法與以下異常:

System.ArgumentException: System.ArgumentException:指定的實體類型,「MyProject.Core.Foo」, 不匹配來自EntitySet'FoosViews'的類型'EntityFramework.SqlServerModel.FoosView' 。

有什麼建議嗎?

回答

3

這裏的事情,尋找一個清單:

  1. 存儲模型應該有:
    1. 兩個EntitySetsFooFooView
    2. 兩個EntityTypesFooFooView
  2. 概念模型應該有:
    1. EntitySetsFooFooView - EntityType設置爲ModelName.Foo
    2. 一個EntityTypeFoo
  3. 映射應該有兩個EntitySetMappings
    1. Foo一個EntityTypeMapping(「MODELNAME。 Foo「)與一個MappingFragment(」Foo「)
    2. (「ModelName。
    3. FooView與一個EntityTypeMapping(」ModelName。 「)與一個MappingFragment(」 FooView「)

你應該新的能夠執行以下操作:

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

您可以通過以下步驟給自己一個領先地位:

  1. 添加FooFooView到模型
  2. Foo點擊Mapping DetailsAdd a Table or View並選擇FooView
  3. 從模型
  4. 保存模型刪除FooView並在XML編輯器
  5. pre-RTM打開查找<StorageModels><EntityType Name="FooView">和刪除任何不正確的項從<Key>(它應該匹配<EntityType Name="Foo">
  6. 刪除<EntityTypeMapping Name="IsTypeOf(Foo)" /><EntityTypeMapping Name="IsTypeOf(FooView)" />( Y導致我的錯誤)

作爲beta 2版本中,實現上述將打破設計師

+0

理查德嗨 - 感謝堆這個職位。這裏有很多數據,所以我會盡量在時間耗盡之前儘快完成。在你的第一步中,你是否說我創建了兩個poco的 - 一個叫做「Foo」,另一個叫做「FooView」?另外,當你的帖子談到「實體類型」時,這就是我所說的POCO類嗎?和'多個實體集合',這意味着我的*表*在我的設計師(例如表Foo和查看FooView)? – 2010-01-15 13:25:45

+0

在我的例子中,我沒有使用POCO,但概念是相同的。最主要的是保留兩個獨立的實體集合,以及兩個不同的**存儲** EntityTypes,但只有一個**概念** EntityType。 – 2010-01-15 14:01:46

+0

概念EntityTypes與您的POCO相同。存儲實體類型是數據庫表的表示。 – 2010-01-15 14:03:33

1

在NHibernate中,應該使用Projections來解決這個問題。 所以,我認爲必須存在類似於實體框架中的東西。我GOOGLE了一下,我就翻過這一點: