如何确保EF为对象的相同出现生成相同的Id?
E.g。如果我有一个类:
class Foo{
ICollection<Bar> Bar1;
ICollection<Bar> Bar2;
}
如果我创建新实体Foo
并向Bar
和Bar1
添加Bar2
(无ID设置)的单个实例,它是否会使用相同的ID为两者或每次创建一个新的? E.g:
var bar = new Bar();
var foo = new Foo{
Bar1 = new List<Bar>(){ bar };
Bar2 = new List<Bar>(){ bar };
}
context.SaveChanges();
Bar1
和Bar2
是否包含具有相同ID的相同记录bar
?
更新:如果我有两个与Equals
和哈希码相同的实例怎么办?
var first = new Bar();
var second = new Bar(); /// first.equals(second )
var foo = new Foo{
Bar1 = new List<Bar>(){ first };
Bar2 = new List<Bar>(){ second };
}
或EF不检查等于吗?
答案 0 :(得分:1)
是的,实体框架将为foo
创建一条记录,并为数据库中的bar
创建一条记录。由于两个列表都包含相同的Bar
实例,因此相应的数据库条目将指向同一记录。