C# 实体框架重复记录
假设我有这个类:C# 实体框架重复记录,c#,database,entity-framework,C#,Database,Entity Framework,假设我有这个类: public class Element { [Key] public int ElementId { get; set; } public int? ParentId { get; set; } [ForeignKey("ParentId")] public virtual Element Parent { get; set; } [Required, MaxLength(100)] public string N
public class Element
{
[Key]
public int ElementId { get; set; }
public int? ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual Element Parent { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
public Element(string name, Element parent)
{
Name = name;
Parent = parent;
}
}
现在当我
Element A = new Element("A", null);
Element B = new Element("B", A);
Element C = new Element("C", A);
Context.Elements.Add(A);
Context.Elements.Add(B);
Context.Elements.Add(C);
EF立即在数据库中写入A的三个副本。我如何告诉EF不要写入父元素,除非它不存在?您是否在某处设置了它们的键?在我看来这不像EF代码。。。请发布更多信息?实体不应具有参数化构造函数。@KingKing“never”可能有点极端,但只要您也具有无参数构造函数,就可以接受它。当您始终可以使用属性初始值设定项时,声明参数化构造函数是无用的。另外,我认为为实体类声明参数化构造函数不是很合乎逻辑。请记住,它通常是数据库中某个表/视图的映射,所以只需使用无参数构造函数就可以了。这是一种应该始终有效的模式,但不确定其他方式。没有无参数构造函数,EF无法创建实体,这是主要原因。因此,当您添加一个带有参数的版本时,始终需要确保您也添加了无参数版本。