2013-12-19 2 views
5

Entity Frameworkが外部キーが設定されているときに正しい関連オブジェクトを検索することを決定した正確なドキュメントを見つけることができませんでした。ナビゲーションプロパティを修正するためにEntity Frameworkがトリガされる要因は何ですか?

私は遅延読み込み(ただしトラッキングを変更しない)プロキシを使用しています。関連するナビゲーションオブジェクトが既にロードされてDbContextに座っている場合でも、外部キーを設定してナビゲーションプロパティ値を取得するとnullが返されます。

DetectChangesの呼び出しは機能しますが重いようです。フィックスアップを行うためにEntity Frameworkを手がかりにする他の方法はありますか?

答えて

4

あなたはそうです。 DetectChangesは、リレーションシップフィックスアップをトリガーするメソッドです。何らかの理由でリレーションシップフィックスアップを実行する場合は、DetectChangesに電話してください。

しかし、あなたは、次の方法を実行したときにDetectChangesもEF自身によって呼び出されます。

  • DbSet.Add
  • DbSet.Find
  • DbSet.Remove
  • DbSet.Local
  • DbContext .SaveChanges
  • DbSet.Attach
  • DbCon text.GetValidationErrors
  • DbContext.Entry
  • DbChangeTracker.Entries
  • DbSet

(ラーマン&・ミラー氏の著書からDbContext、Pに対して任意のLINQクエリを実行しています。 60)。

見ての通り、あなたは他の有用なものを持っているので、もし、その後行うには、DetectChangesを呼び出して最初のこれらの事を行うと、1つのDetectChangesコールが保存されます外部キーの値を設定した後、EFで行いますほとんど何も。

+0

完全に変更を検出せずにフィックスアップを行うDetectChangesの呼び出しは、メソッドがありますか? – jnm2

+0

いいえ、 'ObjectStateManager'は' DetectChanges'で呼び出されるプライベートメソッド 'AlignChangesInRelationships'のみを持っています。しかし、最初に変更を検出し、これらの変更の影響を受ける関係を修正するのが最も効率的な方法です。すべての関係ではありません。 –

関連する問題