私はこれらの単純なエンティティを持っています:
public class Child
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Parent Parent { get; set; }
}
public class Parent
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
次のようにシード メソッドにデータを追加しています。
var parent = new Parent { Name = "First" };
context.Parents.AddOrUpdate(p => p.Name, parent);
var children = new[]{
new Child { Parent = parent, Name = "Child1" },
new Child { Parent = parent, Name = "Child2" },
};
context.Children.AddOrUpdate(c => c.Name, children);
これは期待どおりに機能し、データベース (update-database) を複数回更新できます - 重複はありません。ただし、次のように 3 番目の子を追加すると:
var parent = new Parent { Name = "First" };
context.Parents.AddOrUpdate(p => p.Name, parent);
var children = new[]{
new Child { Parent = parent, Name = "Child1" },
new Child { Parent = parent, Name = "Child2" },
new Child { Parent = parent, Name = "Child3" },
};
context.Children.AddOrUpdate(c => c.Name, children);
update-databaseを再度呼び出して、2 番目の親が挿入され、データベースに 2 つの親が作成されました。4 番目の子が必要で追加すると、3 番目の親が挿入されます。
これを防ぐにはどうすればよいですか?