EntityFramework5.0コードを最初に既存のデータベースに追加します。動力工具を使用してクラスをリバースエンジニアリングしました。すべてがうまく機能しています。データベースには2つのテーブルがあります。親IDに戻る外部キーを持つ1人の親と1人の子。IDはすべて自動インクリメントの整数です。いくつかの親レコードを追加しましたが、特定の親に子レコードを追加したいと思います。これを行うために私が見ることができる唯一の方法は、Parentsテーブルで名前またはその他のプロパティを検索して適切な親IDを見つけ、IDを返すことです。次に、子を追加するときに、外部キープロパティでそのIDを使用します。新しい親を作成したくないので、これが既存の親に子を追加する唯一の方法ですか?すべてのインターネットの例は、新しい親を追加するとともに子を追加し、既存の親に子を追加しないようです。どんな助けでも大歓迎です
14095 次
1 に答える
26
「ジュリー」(ラーマン)は、EFに関してはたまたま私たちの教師の一人です。彼女が著書DbContextで説明しているように、親子の関連付けには3つのプロパティ、2つのナビゲーションプロパティ(parent.Children、child.Parent)、および外部キープロパティ(child.ParentId)が含まれる可能性があります。これらのいずれか、またはそれらの任意の組み合わせをコードに設定できます。
EFがトリガーされて変更が検出されると(たとえば、呼び出されたとき) 、3つのプロパティが同期することを保証するリレーションシップフィックスアップSaveChanges
と呼ばれるプロセスが開始されます。
したがって、子エンティティを親に追加するための3つのオプションがあります。
child.Parent = parentObject
。親オブジェクトは、最初にデータベースからフェッチする必要があります。parentObject.Children.Add(child)
。また、データベースからの既存の親オブジェクトが必要です。child.ParentId = parentId
、IDを知っているだけで済みます。提案した方法でIDを取得できますが、同様に、削除されないことがわかっているオブジェクトの場合は、IDを変数に保存して、トランザクション間で再利用できます。
最初の2つのオプションでは、子オブジェクトをコンテキストに手動で追加する必要はありません。EFは、それが新しいことを十分に理解しています。context.Children
3番目のオプションでは、前に追加する必要がありますSaveChanges
。
于 2012-10-31T08:40:25.687 に答える