我无法从模型中获取正确的数据库结构。我的模型具有一定的继承性,这是实体框架无法自行解决的问题(我认为)。
课程。我有多个非常相似的设置。仅显示一个:
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
。该表包括以下列:
我了解所有列,这些都基于我拥有的不同类型。我似乎无法弄清的唯一一件事是最后的MultipleAnswersRepeatingSortedId
专栏。实体框架为此列创建与Answers
表的外键关系。为什么EF不使用已经定义的AnswerId
?
我尝试指定列名,但这似乎没有任何影响。
答案 0 :(得分:1)
MultipleAnswersRepeatingSortedId
是属性MultipleAnswersRepeatingSorted.Answers
中一对多关系的FK。
所以MultipleAnswersRepeatingSorted
1 ..... * PartialAnswer
。
这意味着我们可以拥有属性PartialAnswer.MultipleAnswersRepeatingSorted
给我们FK PartialAnswer.MultipleAnswersRepeatingSortedId
PartialAnswer.AnswerId
的基本含义是PartialAnswer
* ..... 1 Answer
。
这意味着您可以拥有一个Answer.PartialAnswers
与MultipleAnswersRepeatingSorted.Answers
不同的属性。
我的建议是删除MultipleAnswersRepeatingSorted.Answers
属性,然后定义Answer.PartialAnswers
。