0

データベース ビューから収集したプロパティでエンティティを拡張するために、エンティティ分割を使用してみました。これは、分割されたエンティティを直接ロードするとうまく機能しますが、分割されたエンティティがナビゲーション プロパティを介して接続されているエンティティがある場合は機能しません。

大雑把に言うと [エンティティ A]-[エンティティ B]-[エンティティ C] のようになります。

エンティティ C が分割されていない場合は、エンティティ A を取得し、エンティティ B からエンティティ C に移動できます。これは、遅延読み込みを使用してナビゲーション プロパティを介して行われます (私が理解している限り)。これは魅力のように機能します。

エンティティ C が DB テーブルと DB ビューからのデータを含む分割されたエンティティである場合、エンティティ A からエンティティ C への上記のナビゲーションは null を返します。一方、エンティティ C を直接ロードすると、DB テーブルのデータと DB ビューのデータの両方を含む完全にロードされます。

私が考えていなかった特別なことはありますか?

4

2 に答える 2

0

私の問題は、分割されたエンティティが内部結合を介して接続されるという事実でした (ここでの議論を参照してください http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/237c1de4-7a42-4c3f-80ab-16601e7fadac / ) 私が期待したのは、左結合のようなもので、追加のテーブルからのプロパティが存在する場合は追加され、存在しない場合は無視されます。実際、追加のテーブルにエントリがない場合、エンティティ全体は初期化されません。

上記の遅延読み込みの問題は、一方では追加のプロパティを含むエンティティをロードし、他方では前述のように初期化されていないため、初期化さえされなかったエンティティをロードしたため、単なる偶然でした。

于 2012-12-07T08:31:21.057 に答える
0

Gil Fink の記事が参考になるかもしれません。

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/03/06/entity-splitting-in-entity-framework.aspx

エンティティ C が DB テーブルと DB ビューからのデータを含む分割されたエンティティである場合、エンティティ A からエンティティ C への上記のナビゲーションは null を返します。一方、エンティティ C を直接ロードすると、DB テーブルのデータと DB ビューのデータの両方を含む完全にロードされます。

あなたの言うことは正しいように聞こえます。テーブルを適切に分割すると、これらのプロパティはエンティティ C で使用できなくなります。

エンティティ C のプロパティが「常に」必要ない場合は、最初のマッピング シナリオで十分です。

于 2012-12-06T14:37:27.707 に答える