Код EF сначала: денормализовать наследуемый тип - PullRequest
0 голосов
/ 22 июня 2011

У меня есть следующие сущности:

Human

-Name

-Age

-Height

-Weight
SuperHuman : Human

-SuperPower

EF создает таблицу SuperHumans только со свойством Power и при запросе присоединяется к таблице Humans.Я хочу, чтобы все столбцы в таблице SuperHumans.

Можно ли настроить EF 4.1 Code First для этого?

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Разве не делает человека частичной работой ??Если это не сработает, просто посмотрите на таблицу на иерархию против таблицы на тип против таблицы на конкретный тип (TPH, TPT, TPC).Вы используете TPT и хотите использовать TPC.

0 голосов
/ 24 июня 2011

Мне просто нужно настроить SuperHuman для отображения унаследованных свойств, например так:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<SuperHuman>().Map(m => m.MapInheritedProperties());
    {
0 голосов
/ 22 июня 2011

Один из способов сделать это состоит в том, чтобы сделать отношения «отношение есть» вместо отношения «есть».

public class SuperHuman
{
    public Human TheHuman { get; set; }
    public string SuperPower { get; set; }
}

Результирующая таблица базы данных должна иметь все поля Human и SuperHuman (если у вас нет отдельной таблицы Human, в этом случае будет создана отдельная таблица Human и к ссылке будет добавлен внешний ключ). столы вместе.)

Он ограничен в полезности, так как нарушает наследование. Вы можете найти лучшее решение.


Редактировать: Вы могли бы сделать что-то вроде этого:

public class SuperHuman : Human
{
    public string Name 
    { 
        get { return base.Name; } 
        set { base.Name = value; } 
    }
}

Примечание: Это не проверено и может быть не лучшим решением. Я включил это здесь просто как возможное решение.

...