personという名前の新しいオブジェクトを作成し、addressというデータベース内のレコードに接続したいとします。私が行ってPersonオブジェクトを保存するとき、私は2回目のアドレスを挿入して複製を作成したくありません。これをEFで処理する最良の方法は何ですか?Entity Frameworkオブジェクトの状態new/existing
答えて
これを行う最も良い方法は、オブジェクト全体ではなく、外部キーフィールドのみを設定することです。例えば
、ここで
Person p = new Person();
p.Name = "John Doe";
p.AddressId = 12345;
context.People.Add(p);
context.SaveChanges();
はEFがレコードを複製する理由を説明するジュリー・ラーマンによって素晴らしい記事です。 https://msdn.microsoft.com/en-us/magazine/dn166926.aspx
これは、PersonクラスにAddressナビゲーションプロパティに加えてAddressIdプロパティがある場合にのみ機能することに注意してください。 –
ナビゲーションプロパティにIDがあり、IDにEFが重複を作成した場合 –
アドレスが存在し、その人物が新規の場合は、アドレスナビゲーションプロパティを設定しないでください。コードで設定する場合は、外部キーIDフィールドを設定しているかどうかにかかわらず、アドレスがすでに存在しているか、新しいアドレスが作成されることをEFに伝える必要があります。私が参照した記事(context.Entry(topic).State = EntityState.Unchanged)は、既存のアドレスを無視するようにEFに指示している行です。私が提供した答えを使用するナビゲーションプロパティではなく、IDフィールドだけを設定してください。それ以外の場合は、Julieがコード内でエンティティの状態を示唆し、管理するために行う必要があります。 – user1011627
- 1. Entity Frameworkのには一貫性のないオブジェクト状態エラーに
- 2. グローバル状態なしのEntity Frameworkの使用
- 3. WCF、Entity Framework 4.1およびエンティティの状態
- 4. Entity Framework - 既定の子オブジェクト
- 5. フォームバッキング状態オブジェクト
- 6. Entity Frameworkは、状態= EntityState.ModifiedのSaveChanges()の後にレコードを更新しません。
- 7. データ転送オブジェクトとEntity Framework
- 8. Dapperオブジェクト状態トラッキング
- 9. onFlushDirty()の前の状態オブジェクト
- 10. Hibernateのオブジェクトの状態
- 11. Entity Frameworkでのオブジェクトの削除
- 12. Entity Frameworkのオブジェクト参照の使用
- 13. Entity Framework:ビジネスレイヤー(オブジェクト)でのカスタムプロパティの作成
- 14. Linq/Entity Frameworkのオブジェクトとコンテキストの違い
- 15. ViewModelオブジェクトへのEntity Frameworkナビゲーションプロパティのマッピング
- 16. Entity Framework 4の動的オブジェクトへのキャストオブジェクト
- 17. オブジェクト状態の取得
- 18. js、オブジェクトの状態監視
- 19. ASP.Netアプリケーション状態オブジェクトのリサイクルオプション
- 20. Entity Framework - ナビゲーションパス内のオブジェクトをスキップする
- 21. Microsoft Bot Framework - クリア会話状態
- 22. JavaScriptオブジェクトのリテラルネストされたオブジェクト状態
- 23. Entity Framework - コレクションとしてオブジェクトを取得
- 24. Entity Frameworkコードファーストと無効なオブジェクト名エラー
- 25. Entity Frameworkでオブジェクトをキャッシュする方法
- 26. Entity Framework ContextオブジェクトをWCFに渡す
- 27. Entity Framework ObjectStateEntryからオブジェクト型を取得
- 28. Entity Frameworkにオブジェクトを追加する
- 29. Entity Framework Attach()共有オブジェクトを持つオブジェクトツリー
- 30. Entity Framework 6で階層オブジェクトをロード
は、あなたの人物オブジェクトを作成した後、あなたは、単にそのアドレスメンバーを設定した人の記録を、使用方法を追加し、変更を保存 – Kevorkian
ええけど、私は(挿入)保存したい –
単純に(人)メソッド、および場合addを使用あなたが住所にいる人への参照がある場合は、更新する必要があります。 – Kevorkian