EF6保存时检测到冲突的更改

时间:2015-05-09 02:01:34

标签: c# entity-framework

我有一个父/子层次结构,我想在DbContext中插入一个新的父级,让它自动保存子对象。

每次我在DbContext EF上的所有SaveChanges都抛出了

的异常
  

检测到冲突的更改。尝试插入时可能会发生这种情况   具有相同密钥的多个实体。

我理解错误,因为Child对象没有Identity列。

模型如下:

public class Parent
{
     public int ParentId { get; set; }
     public string Name { get; set; }
     public ICollection<Child> Children { get; set; }
}

public class Child
{
     public int ParentId { get; set; }
     public virtual Parent Parent { get; set; }
     public string Name { get; set; }
}

下面的儿童对象的映射::

public class ChildMap : EntityTypeConfiguration<Child>
{
   this.HasKey(p => p.ParentId);
   this.Property(p => p.ParentId)
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

   this.HasRequired(t => t.Parent)
       .WithMany(t => t.Children)
       .HasForeignKey(d => d.ParentId);
}

模型是使用EF Power工具生成的,因为我们遵循DB-First设计。

是否有一种方法可以保存图表,而不是先将父级保存为子级?

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题,通过从模型中删除不必要的FK关联来解决。出于某种原因,从数据库更新模型时未删除这些内容。

为此,我只是在实体设计器中找到了关联,将其删除,并从数据库中重新更新了模型。

它也可能是由于特定列上的关系多重性无效,即0..1-1关系,而不是* - 1.在模型浏览器下创建一个新的实体图并添加表是你的调查(和他们的相关表格),你将能够轻松地看到(并改变)多重性。