在实体框架核心中配置相同实体的父子类关系

时间:2018-03-15 11:04:00

标签: .net-core entity-framework-core

我正在研究Entity Framework核心,需要实现同一个问题'问题'实体进入QuestionHierarchy实体。在数据迁移期间,我收到以下错误。我还有下面的配置类

数据迁移错误

Introducing FOREIGN KEY constraint 'FK_QuestionHierarchy_Questions_ParentQuestionId' on table 'QuestionHierarchy' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

无法创建约束。查看以前的错误。

问题实体

public class QuestionDataModel : IDataModel<Guid>
{
    public QuestionDataModel()
    {
        ParentQuestionsInHierarchy = new HashSet<QuestionHierarchyDataModel>();
        ChildQuestionsInHierarchy = new HashSet<QuestionHierarchyDataModel>();

    }
    public Guid Id { get; set; }

    public virtual ICollection<QuestionHierarchyDataModel> ParentQuestionsInHierarchy { get; set; }
    public virtual ICollection<QuestionHierarchyDataModel> ChildQuestionsInHierarchy { get; set; }

}

问题层次表

public class QuestionHierarchyDataModel 
{
    public QuestionHierarchyDataModel()
    {

    }

    public Guid Id { get; set; }
    public Guid ParentQuestionId { get; set; }
    public virtual QuestionDataModel ParentQuestions{ get; set; }
    public Guid ChildQuestionId { get; set; }
    public virtual QuestionDataModel ChildQuestions { get; set; }

}

问题实体配置类

public void Configure(EntityTypeBuilder<QuestionDataModel> builder)
    {

        builder.ToTable("Questions");
        builder.HasKey(question => question.Id);
        builder.HasMany(question => question.ParentQuestionsInHierarchy);
        builder.HasMany(question => question.ChildQuestionsInHierarchy);

    }

问题层次结构配置类

public void Configure(EntityTypeBuilder<QuestionHierarchyDataModel> builder)
    {
        builder.ToTable("QuestionHierarchy");
        builder.HasKey(questionHierarchy => questionHierarchy.Id);

        builder
            .HasOne(questionHierarchy => questionHierarchy.ParentQuestions)
            .WithMany(question => question.ParentQuestionsInHierarchy)
            .HasForeignKey(questionHierarchy => questionHierarchy.ParentQuestionId);

        builder
           .HasOne(questionHierarchy => questionHierarchy.ChildQuestions)
           .WithMany(question => question.ChildQuestionsInHierarchy)
           .HasForeignKey(questionHierarchy => questionHierarchy.ChildQuestionId);
    }

0 个答案:

没有答案