【发布时间】:2014-11-27 22:12:33
【问题描述】:
我有一个父/子层次结构,我想将新的父级插入到 DbContext 中并让它自动保留子对象。这种关系是一对多的,每个父级可以在 0 列或更多列。
但每当我调用 DbContext.Save(parent) 时,我都会收到“检测到冲突更改”。尝试插入具有相同键的多个实体时可能会发生这种情况。当我剥离子列的父级时,它可以节省罚款,所以我假设这与没有设置主键的子对象有关。如何告诉 EntityFramework 正确保存我的层次结构?
我的课:
public class ExcelTemplate
{
public int Id { get; set; }
public string Name { get; set; }
public int FirstDataRow { get; set; }
public virtual ICollection<TemplateColumn> Columns { get; set; }
public ExcelTemplate()
{
Columns = new List<TemplateColumn>();
}
}
public class TemplateColumn
{
public int Id { get; set; }
public int Index { get; set; }
public int MetricTypeId { get; set; }
public virtual MetricType MetricType { get; set; }
public int TemplateId { get; set; }
public virtual ExcelTemplate Template { get; set; }
}
以及配置:
public class ExcelTemplateConfiguration : EntityTypeConfiguration<ExcelTemplate>
{
public ExcelTemplateConfiguration()
{
HasKey(t => t.Id)
.Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(t => t.Name)
.IsRequired();
HasMany(t => t.Columns)
.WithRequired(c => c.Template)
.HasForeignKey(c => c.TemplateId);
}
}
public class TemplateColumnConfiguration : EntityTypeConfiguration<TemplateColumn>
{
public TemplateColumnConfiguration()
{
HasKey(c => c.Id)
.Property(c => c.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(tpl => tpl.MetricType)
.WithRequiredDependent();
}
}
【问题讨论】:
标签: c# entity-framework-6