2011-01-26 8 views
0

エンティティ・フレームワーク・モデルで定義されたオブジェクトがナビゲーション・プロパティを持っていますが、ナビゲーション・プロパティがnullのときは常にエンティティ・フレームワークはデータベースから再度プルダウンしようとします。今は問題ありませんが、後でこの問題に取り組むことができますが、データベースからナビゲーションプロパティを取得しようとすると、モデルからエラーが発生します。EFがnullプロパティにアクセスしようとするとコンテキストがクローズされる

ObjectContextインスタンスが破棄されました。接続が必要な操作に使用されます。

これはあまりにも良いことではない、このようなチャンクを吹いている。コンテキストがまだ開いているときにこれが試みられることを保証するためにできることはありますか?

ありがとうございます!

答えて

2

遅延読み込みがオンになっていますが、ObjectContextを処分しました。すぐに処分しないでください。turn off lazy loading

+0

迅速な応答をありがとう!私は文脈を開いたままにしておきたい。しかし、私がコントロールすることができないデザインの選択は、コンテキストを開いたままにすることはできません。もう1つの問題は、モデル内のnull以外のIdを使用してナビゲーションプロパティをロードしようとしたが、レコードが存在しないためにヌルナビゲーションプロパティが得られるため、どちらも遅延ロードされているということではありません。これは、コンテキストが開いているときには問題ありませんが、それ以降のアクセスでは、コンテキストが閉じた状態でのみ、再びプロパティを取得しようとします。 cont ... – khr055

+0

最初にこの問題が起きるのを防ぐためにFK制約を置いていますが、オブジェクトは別のdbのテーブルの列を含むビューから来ています。他の考え? – khr055

+0

遅延ロードをオフにすると、フレームワークは「プロパティを再度取得しようとしません」。 –

1

EFフレームワークも 'eager loading'をサポートしています。これは、関連するエンティティが同じクエリで返されることを意味します。これについては、必要な関連エンティティを事前に知っておく必要がありますが、これは私が多く使うテクニックです。 シナリオでそれを打つ価値はあるかもしれません。

はここでMSDNの同じサンプルコードです:(http://msdn.microsoft.com/en-us/library/bb896272.aspx)

// Define a LINQ query with a path that returns 
// orders and items for a contact. 
var contacts = (from contact in context.Contacts 
       .Include("SalesOrderHeaders.SalesOrderDetails") 
       select contact).FirstOrDefault(); 
+0

無限の深さで、可能なすべての関連付けを熱心に読み込まない限り、熱心な読み込みでは問題は解決しません。 –

関連する問題