4

私は EF4 を使用しており、同じ POCOにマップしたいエンティティが 2 つあります。どうすればこれができるかわかりません。

エンティティ 1 → Foo (これはデータベース内のテーブル FOO を表します)
POCO → Foo

エンティティ 2 → FooView (これは db 内のビュー FooView を表します)
POCO → Foo

私は次のようなことをする必要があることを理解しています

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' と一致しません。

助言がありますか?

4

2 に答える 2

3

探すべきもののチェックリストは次のとおりです。

  1. ストレージモデルには以下が必要です。
    1. 2 EntitySets:FooFooView
    2. 2 EntityTypes:FooFooView
  2. 概念モデルには以下が必要です。
    1. Two EntitySets: Fooand FooView-両方EntityType設定ModelName.Foo
    2. 1 EntityType:Foo
  3. マッピングにはの 2 つが必要EntitySetMappingsです。
    1. Foo1 つEntityTypeMapping("ModelName.Foo") と 1 つMappingFragment("Foo")
    2. FooView1 つEntityTypeMapping("ModelName.Foo " ) と 1 つMappingFragment("FooView")

以下を実行できるようになるはずです。

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

次のことを行うことで、有利なスタートを切ることができます。

  1. モデルにFooとを追加するFooView
  2. クリックMapping Detailsして選択FooAdd a Table or ViewFooView
  3. FooViewモデルから削除
  4. モデルを保存し、XML エディターで開きます
  5. ( pre-RTM )から不正なエントリを見つけ<EntityType Name="FooView"><StorageModels>削除します<Key>(一致する必要があります<EntityType Name="Foo">) 。
  6. <EntityTypeMapping Name="IsTypeOf(Foo)" />and を削除し<EntityTypeMapping Name="IsTypeOf(FooView)" />ます(エラーが発生しました)

beta 2 の時点で、上記を実装するとデザイナーが壊れます

于 2010-01-15T10:02:10.617 に答える
1

NHibernateでは、プロジェクションを使用してこれを解決する必要があります。ですから、EntityFrameworkにも似たようなものが存在しているに違いないと思います。私は少しググった、そして私はこれに出くわした:

于 2010-01-11T12:57:34.240 に答える