ef code сначала отображает подклассы на один внешний ключ - PullRequest
0 голосов
/ 12 августа 2011

Я нигде не могу найти ответ на этот вопрос, так что вот так.

У меня есть несколько подклассов типа "Ответ".Всем ответам потребуется ссылка на свой вопрос.

По умолчанию, когда ef создает таблицу «Ответы», он создает одну ссылку внешнего ключа на таблицу вопросов с именем 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; }
    }

Я попытался добавить идентификатор вопроса в классы 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; }
    }

1 Ответ

1 голос
/ 13 августа 2011

Я немного поиграл с ним, и это только подтвердило мои ожидания. Это, вероятно, не возможно. Столбцы, отображаемые в производных объектах, должны быть уникальными среди всех объектов в иерархии. Если я пытался переназначить отношения в один и тот же столбец, я получал исключение, сообщая, что столбец с тем же именем уже использовался. В родительской сущности могут быть определены только общие столбцы, поэтому до тех пор, пока вы не переместите свое свойство навигации в базу Question и в базу ссылок Answer, вы этого не достигнете.

...