我无法在任何地方找到答案,所以就这样了。
我有几个子类“答案”类型。所有答案都需要参考他们的问题。
默认情况下,当ef创建“Answers”表时,它会创建一个名为FullNameQuestion_QuestionId的问题表的外键引用,以及一个名为TextboxQuestion_QuestionId的外键引用。
我想要的是TextboxQuestion和FullNameQuestion都使用相同的QuestionId外键。我无法弄清楚如何使映射适用于此。
public abstract class Question
{
public int QuestionId { get; set; }
private string Text { get; set; }
}
public class TextboxQuestion : Question
{
public string TextboxValue { get; set; }
public virtual List<TextboxAnswer> TextboxAnswers { get; set; }
}
public class FullNameQuestion : Question
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public virtual List<FullNameAnswer> FullNameAnswers { get; set; }
}
public abstract class Answer
{
public int AnswerId { get; set; }
public int UserId { get; set; }
}
public class TextboxAnswer : Answer
{
public string TextboxValue { get; set; }
}
public class FullNameAnswer:Answer
{
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
我尝试将问题ID添加到TextboxAnswer和FullNameAnswer这样的类中,但它只创建了两列,QuestionId和QuestionId1。有没有办法让这些共享同一列?
public class TextboxAnswer : Answer
{
[ForeignKey("Question")]
public int QuestionId { get; set; }
public virtual Question Question { get; set; }
public string TextboxValue { get; set; }
}
public class FullNameAnswer:Answer
{
[ForeignKey("Question")]
public int QuestionId { get; set; }
public virtual Question Question { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
}
答案 0 :(得分:1)
我现在玩了一点点,它只是证实了我的期望。这可能是不可能的。在派生实体中映射的列在层次结构中的所有实体中必须是唯一的。如果我试图将关系重新映射到同一列,我得到例外,说已经使用了具有相同名称的列。唯一的共享列可以在父实体中定义,因此在您将导航属性移动到基础Question
和引用基础Answer
之前,您将无法实现此目标。