生成不同ID的相同实体

时间:2013-05-13 18:53:55

标签: c# entity-framework

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

E.g。如果我有一个类:

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

如果我创建新实体Foo并向BarBar1添加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();

Bar1Bar2是否包含具有相同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不检查等于吗?

1 个答案:

答案 0 :(得分:1)

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