Entity Framework (EF) 5 Code First を使用しています。
私は自己参照オブジェクトを持っています。それを呼びましょうDemo
:
public class Demo
{
public int Id;
public string Name;
public Demo Parent;
public ICollection<Demo> Children;
public Item Item;
}
これには、別のオブジェクトへの参照がありますItem
:
public class Item
{
public int Id;
public string Name;
public Item Parent;
public ICollection<Item> Children;
}
はい、自己参照でもありますが、これは問題ではありません。データベースには、データベースの移行によってテーブルItem_Id
に追加された に基づく外部キーがあります。データベースには一連のレコードDemo
が事前に入力されています (限定されたセットです)。Item
私のコンテキストはこれをデータベースにうまくマッピングしており、新しいレコードの大規模なデータ挿入を行っています。オブジェクトをデータで満たすコードがもう 1 つあります。これは、EF を介した実際のインポートです。
public void ImportDemo(IEnumerable<Demo> demos)
{
var context = this.UnitOfWork.MyApplicationContext;
foreach (var demo in demos)
{
this.DataSet.Add(demo);
context.Entry(demo).State = EntityState.Added;
}
// NOTE: expecting an empty db.
context.SaveChanges();
}
私の DbModelBuilder には次のものがあります。
modelBuilder.Entity<Demo>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children);
modelBuilder.Entity<Item>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children);
エンティティと子エンティティDemo
を正常にインポートできますが、各子エンティティは、既存の にリンクするだけでなく、データベースに新しい を作成しています。親エンティティにはレコードがなく、null です。Demo
Demo
Item
Item
Demo
Item
子エンティティが新しいレコードを作成するのではなくDemo
、既存のレコードにリンクしていることを確認するにはどうすればよいですか?Item