【发布时间】:2017-06-30 17:32:30
【问题描述】:
我试图弄清楚如何配置 EF Code First,以生成表。我遇到的问题是我不确定如何正确配置表。该表与自身具有父子关系。我更喜欢使用 FluentAPI 配置而不是属性的解决方案。
EF 正在生成下表:
Specification
-------------
SpecificationId
Name
ParentSpecificationId
ParentSpecification_SpecificationId
这是课程:
public class Specification
{
public Specification()
{
Children = new Collection<Specification>();
}
public int SpecificationId { get; set; }
public string Name { get; set; }
public int? ParentSpecificationId { get; set;}
public virtual Specification ParentSpecification { get; set;}
public virtual ICollection<Specification> Children { get; set;}
}
我根据this问题尝试了下面的配置
public class SpecificationConfiguration : EntityTypeConfiguration<Specification>
{
public SpecificationConfiguration()
{
ToTable("Specification");
HasKey(k => k.SpecificationId);
Property(p => p.SpecificationId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
HasRequired(t => t.ParentSpecification)
.WithMany(t => t.Children)
.HasForeignKey(t => t.ParentSpecificationId)
.WillCascadeOnDelete(false);
HasOptional(t => t.Children)
.WithMany()
.HasForeignKey(t => t.SpecificationId)
.WillCascadeOnDelete(false);
}
}
我的配置有什么问题和/或如何让 EF 停止生成 ParentSpecification_SpecificationId 并将值放入 ParentSpecificationId?
注意:EF 将正确的值放入它生成的列中。
【问题讨论】:
标签: c# entity-framework