Entity Framework генерирует столбцы, которые не нужны на основе наследования - PullRequest
0 голосов
/ 16 мая 2019

У меня проблемы с получением правильной структуры базы данных из моих моделей.У моих моделей есть наследование, и Entity Framework не может понять это самостоятельно (я думаю).

Классы.У меня есть несколько таких настроек, которые очень похожи.Показывает только одно:

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>();
    // ...

При создании миграции Entity Framework создает новую таблицу PartialAnswers.В этой таблице есть следующие столбцы:

  • Id
  • AnswerId
  • Дискриминатор
  • Ключ
  • Набор
  • MultipleAnswersRepeatingSortedId
  • ...

Я понимаю, все столбцы, все они основаны на различных моих типах.Единственное, что я не могу понять, это последний столбец MultipleAnswersRepeatingSortedId.Entity Framework создает отношение внешнего ключа к таблице Answers для этого столбца.Почему EF не использует уже определенный AnswerId?

Я пытался указать имя столбца, но это, похоже, ни на что не влияет.

1 Ответ

1 голос
/ 16 мая 2019

MultipleAnswersRepeatingSortedId - это FK для отношения один-ко-многим из свойства MultipleAnswersRepeatingSorted.Answers.

Итак MultipleAnswersRepeatingSorted 1 ..... * PartialAnswer.
Это означает, что мы можем иметь свойство PartialAnswer.MultipleAnswersRepeatingSorted
Дает нам ФК PartialAnswer.MultipleAnswersRepeatingSortedId


PartialAnswer.AnswerId в основном означает PartialAnswer * ..... 1 Answer.
Это означает, что у вас может быть свойство Answer.PartialAnswers, отличное от MultipleAnswersRepeatingSorted.Answers.


Я предлагаю удалить свойство MultipleAnswersRepeatingSorted.Answers и просто определить Answer.PartialAnswers.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...