C# 生成不同ID的相同实体
如何确保EF为对象的同一次出现生成相同的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
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 };
}