0

私はどこにでもこの回答を見つけることができません。ef code firstサブクラスを単一の外部キーにマップする

サブクラスの「回答」タイプがいくつかあります。すべての回答には、質問への参照が必要です。

デフォルトでは、efが "Answers"テーブルを作成すると、FullNameQuestion_QuestionIdという質問テーブルとTextboxQuestion_QuestionIdという名前の質問テーブルへの外部キー参照が1つ作成されます。

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

私はこのようなTextboxAnswerとFullNameAnswerクラスに質問IDを追加しようとしたが、それはちょうど2つの列、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; } 
    } 

答えて

1

私はこれで少し演奏し、私の期待を裏付けました。おそらく不可能です。導出されたエンティティにマップされる列は、階層内のすべてのエンティティ間で一意でなければなりません。同じ列のリレーションを再マップしようとすると、同じ名前の列がすでに使用されているという例外があります。あなたはあなたのナビゲーションプロパティをQuestionのベースと参照ベースAnswerに移動するまで、それを達成しない限り、親エンティティで唯一の共有カラムを定義することができます。

関連する問題