2009-03-03 11 views
0

私が現在取り組んでいるプロジェクトの一部では、シンジケート可能なアクションの4つのテーブルがあります。一つのテーブルには、他の三つの抽象基本であり、そのように各テーブルには、私のEFモデルで表現されていますEntity Frameworkの継承問題(タイプごとのテーブル)

EF Model -- Actions http://chris.charabaruk.com/system/files/images/EF+Model+Actions.png

私は現在、しかし、これに直面しています二つの問題があります。最初の問題は、関連するデータベース列が関連する行の有効なキーを保持しているにもかかわらず、ActorUserへの参照)とSubject(各アクションの種類に関連付けられたクラスのエンティティへの参照)がサブクラスでnullであることです。テーブル。 ActorReferenceSubjectReferenceでキーを取得できるのはもちろん、新しいEFコンテキストを設定し、参照されたオブジェクトを照会する必要があります(FooReference.Valueもnull)。

第2の問題は、具体的なアクションクラスとその関連するエンティティクラスとの間の関係の相反する終わりが常に何も出現しないことです。例えば、Task.RelatedActionsは、私にすべてTaskActionオブジェクトを与えます。Subjectは、RelatedActionsが呼び出される特定のタスクオブジェクトを指していますが、オブジェクトはまったくありません。ここでも、有効な行がデータベースに存在し、Entity Frameworkはそれらをオブジェクトに入れずに渡しません。

誰もが私は間違っていると私はそれを動作させるために何をすべきか知っている?

更新:私のエンティティモデルでは関係プロパティはもう何も働いていないようです。 WTF ...

答えて

5

私はあなたがここで経験している問題は、デフォルトでEFが自動的に関連するエンティティを読み込まないということです。エンティティを読み込む場合、次のいずれかを行わない限り、関連エンティティへのコレクションまたは参照は空になります。

1)メインエンティティと関連するエンティティを1つのクエリで取得するには、熱心な読み込みを使用します。これを行うには、Includeメソッドへの呼び出しを追加して、クエリを変更します。上記のサンプルでは、​​次のクエリを使用することがあります。

これは、関連するActorメソッドを使用して各アクションを取得します。

2)あなたがそれを必要とするとき、関連するエンティティを取得するために、明示的な遅延ロードを使用します。

action1.ActorReference.Load() 

.NET 4.0で出荷されるEFのバージョンでは、あなたはまた、次の追加オプションがあります:

3)ナビゲーションプロパティを参照するときに、関連するエンティティが自動的に取得されるように、暗黙的な遅延読み込みを有効にします。

  • ダニー
+0

私はあなたが正しいと思います。 EF 1.0が暗黙的な遅延読み込みになっていればうれしいですが、それは.NET 4.0とEF 2が得られるまで1年になるからです。 –

+0

これは本当に私の問題を解決します。ありがとう! –

関連する問題