C# 生成不同ID的相同实体

C# 生成不同ID的相同实体,c#,entity-framework,C#,Entity Framework,如何确保EF为对象的同一次出现生成相同的Id 例如,如果我的课程是: class Foo{ ICollection<Bar> Bar1; ICollection<Bar> Bar2; } Bar1和Bar2是否包含具有相同id的相同记录bar 更新:如果我有两个关于Equals和散列码相同的实例怎么办 var first = new Bar(); var second = new Bar(); /// first.equals(second ) va

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

例如,如果我的课程是:

class Foo{
    ICollection<Bar> Bar1;
    ICollection<Bar> Bar2;
}
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 };
}
var first=newbar();
var second=新条();///第一,等于(第二)
var foo=新foo{
Bar1=新列表(){first};
Bar2=新列表(){second};
}

或者EF不检查是否等于?

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

谢谢!如果有两个实例
相等
,该怎么办?请参阅更新。它们是否相等并不重要:两个不同的实例=数据库中的两条记录。改变这种情况的唯一方法是在数据库中使用触发器,根据相等的列值合并行。EF不关心相等。它只关心相同性(这是一个词吗?),即同一个实例将导致一条记录,相同的不同实例(如Equals()==true)将导致多条记录。您自己尝试似乎会更快,不是吗?
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 };
}