我有一个父/子层次结构,我想在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设计。
是否有一种方法可以保存图表,而不是先将父级保存为子级?
答案 0 :(得分:1)
我有一个类似的问题,通过从模型中删除不必要的FK关联来解决。出于某种原因,从数据库更新模型时未删除这些内容。
为此,我只是在实体设计器中找到了关联,将其删除,并从数据库中重新更新了模型。
它也可能是由于特定列上的关系多重性无效,即0..1-1关系,而不是* - 1.在模型浏览器下创建一个新的实体图并添加表是你的调查(和他们的相关表格),你将能够轻松地看到(并改变)多重性。