Entity framework ef代码首先将子类映射到单个外键

Entity framework ef代码首先将子类映射到单个外键,entity-framework,inheritance,mapping,entity-framework-4.1,ef-code-first,Entity Framework,Inheritance,Mapping,Entity Framework 4.1,Ef Code First,我在任何地方都找不到这个问题的答案,所以就这样吧 我有几个子类的“答案”类型。所有答案都需要回到他们的问题 默认情况下,当ef创建“Answers”表时,它会创建一个外键引用,该外键引用名为FullNameQuestion\u QuestionId,另一个外键引用名为TextboxQuestion\u QuestionId 我希望TextboxQuestion和FullNameQuestion都使用相同的QuestionId外键。我不知道如何让映射为此工作 public abstract

我在任何地方都找不到这个问题的答案,所以就这样吧

我有几个子类的“答案”类型。所有答案都需要回到他们的问题

默认情况下,当ef创建“Answers”表时,它会创建一个外键引用,该外键引用名为FullNameQuestion\u QuestionId,另一个外键引用名为TextboxQuestion\u 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; }
    }

我现在玩了一点,它只是证实了我的期望。这可能是不可能的。在派生实体中映射的列在层次结构中的所有实体中必须是唯一的。如果我试图将关系重新映射到同一列,我会得到一个异常,即已经使用了具有相同名称的列。只有共享列才能在父实体中定义,因此,除非您将导航属性移动到base
Question
和reference base
Answer
,否则无法实现这一点

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; }
    }