次のモデルがあります。
class Parent
{
int ParentId (identity column) { get; set; }
string ParentName { get; set; }
virtual ICollection<Child> Children { get; set; }
}
class Child
{
int ChildId (identity column) { get; set; }
string ChildName { get; set; }
int ParentID { get ; set; } //foreign key to Parent(ParentID)
}
単一のトランザクションで親と子にいくつかの行を挿入するにはどうすればよいですか?基本的に、親で生成されたIDを取得し(たとえば、親に行を挿入します)、その値で子行を挿入しますか? Code Firstを使用してこれをどのように実現できますか?
Parent
行を挿入するために、Child
のIdがどのような値を取得するかについて心配する必要はありません。これで十分です:
_var parent = new Parent
{
// fill other properties
Children = new List<Child>()
}
parent.Children.add(new Child { /*fill values */);
dbContext.Parents.Add(parent); // whatever your context is named
dbContext.SaveChanges();
_
レコードの場合、SaveChanges()
を呼び出した後にIDが割り当てられるため、reallyがChild
エンティティは常にSaveChanges()
を2回呼び出すことができます。
繰り返しますが、これは必要ありません。
ちなみに、外部キープロパティをChild
からParent
までをナビゲーションプロパティにすることをお勧めします。したがって、Child
クラスは次のようになります。
_class Child
{
public int ChildId { get; set; } // identity column
public string ChildName { get; set; }
public virtual Parent Parent { get ; set; } //foreign key to Parent
}
_
そうすれば、データベースから明示的に取得する必要なく、常に子の親に直接アクセスできます(遅延ロードされます)。
これを行う方法の例については、新しいEF Code First MVCチュートリアルシリーズを参照してください。シリーズの6番目のものはこの例です。 10のシリーズの最初の1つはここにあります: http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net -mvc-application