实体框架基于继承生成不需要的列

时间:2019-05-16 12:41:38

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

我无法从模型中获取正确的数据库结构。我的模型具有一定的继承性,这是实体框架无法自行解决的问题(我认为)。

课程。我有多个非常相似的设置。仅显示一个:

public class Answer {
    // ...
}


public class PartialAnswer {
    public int Id { get; set; }
    public int AnswerId { get; set; }
    public virtual Answer Answer { get; set; }
    // ...
}

public class PartialSortedAnswer : PartialAnswer {
    public string Key { get; set; }
    // ...
}

public class PartialRepeatingSortedAnswer : PartialSortedAnswer {
    public int Set { get; set; }
    // ...
}


public class MultipleAnswersRepeatingSorted : Answer {
    public virtual IEnumerable<Partials.PartialRepeatingSortedAnswer> Answers { get; set; }
}

我已在上下文中使用以下代码设置了继承的实体:

    builder.Entity<PartialSortedAnswer>();
    builder.Entity<PartialRepeatingSortedAnswer>();
    builder.Entity<MultipleAnswersRepeatingSorted>();
    // ...

在创建迁移时,实体框架会创建一个新表PartialAnswers。该表包括以下列:

  • 编号
  • AnswerId
  • 鉴别器
  • 设置
  • MultipleAnswersRepeatingSortedId
  • ...

我了解所有列,这些都基于我拥有的不同类型。我似乎无法弄清的唯一一件事是最后的MultipleAnswersRepeatingSortedId专栏。实体框架为此列创建与Answers表的外键关系。为什么EF不使用已经定义的AnswerId

我尝试指定列名,但这似乎没有任何影响。

1 个答案:

答案 0 :(得分:1)

MultipleAnswersRepeatingSortedId是属性MultipleAnswersRepeatingSorted.Answers中一对多关系的FK。

所以MultipleAnswersRepeatingSorted 1 ..... * PartialAnswer
这意味着我们可以拥有属性PartialAnswer.MultipleAnswersRepeatingSorted
给我们FK PartialAnswer.MultipleAnswersRepeatingSortedId


PartialAnswer.AnswerId的基本含义是PartialAnswer * ..... 1 Answer
这意味着您可以拥有一个Answer.PartialAnswersMultipleAnswersRepeatingSorted.Answers不同的属性。


我的建议是删除MultipleAnswersRepeatingSorted.Answers属性,然后定义Answer.PartialAnswers