2

如何确保 EF 为对象的相同出现生成相同的 Id?

例如,如果我有这样的课程:

class Foo{
    ICollection<Bar> Bar1;
    ICollection<Bar> Bar2;
}

如果我创建一个新实体并向两者添加一个(没有设置 ID)Foo的单个实例,并且- 它会为两者使用相同的 ID 还是每次都创建一个新的?例如:BarBar1Bar2

var bar = new Bar();
var foo = new Foo{
   Bar1 = new List<Bar>(){ bar };
   Bar2 = new List<Bar>(){ bar };
}
context.SaveChanges();

是否会包含具有相同 IDBar1的相同记录?Bar2bar

更新:如果我有两个在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 不检查是否相等?

4

1 回答 1

1

是的,Entity Framework 将在数据库中创建一条记录foo和一条记录。bar由于两个列表都包含Bar相应数据库条目的相同实例,因此将指向相同的记录。

于 2013-05-13T18:55:42.883 回答