【发布时间】:2015-05-09 02:01:34
【问题描述】:
我有一个父/子层次结构,我想将新的父级插入 DbContext 并让它自动持久化子对象。
每次我在 DbContext EF 上的所有 SaveChanges 都会抛出一个异常
检测到有冲突的更改。尝试插入时可能会发生这种情况 具有相同键的多个实体。
我理解这个错误,因为子对象没有标识列。
型号如下:
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 设计。
有没有办法保存图表而不是先保存父项然后保存子项?
【问题讨论】:
-
你定义了主键吗?
-
如果一个父节点可以有多个子节点,则不能以 ParentId 作为主键。
-
主键是外键(ParentId)。虽然没有身份列
-
您不能有多个具有相同主键的孩子。它必须是独一无二的。这就是你有冲突的原因。
-
你错过了什么?我也有同样的问题,你的回答也无济于事。
标签: c# entity-framework