Как вы сопоставляете свойства подкласса со столбцами в Таблице для Иерархии? - PullRequest
3 голосов
/ 29 августа 2011

Примечание: Я думаю, что это технически все еще в первую очередь код, но у меня также есть существующая база данных, поэтому я не генерирую модели или базу данных на лету (нет .edmx).

У меня есть ситуация TPH, когда подклассы имеют специфичные для них поля.У меня есть EntityTypeConfiguration, определенный для базового класса. Как мне сопоставить поля подкласса со столбцами в моей таблице базы данных?

public class Letter
{
    public string Name { get; set; }
}

public class A : Letter
{
    public int quantity { get; set; }
}

public class B : Letter
{
    public ComplexType description { get; set; }
}



public class LetterMap : EntityTypeConfiguration<Letter>
{
    HasKey...
}

Это EF 4.1.

Редактировать:

Я реализовал решение, предложенное Eranga ниже .Моя проблема сейчас в том, что два подкласса отображают разные значения в один и тот же столбец.(Третий подкласс вообще не заполняет столбец, поэтому я могу переместить свойство на уровень выше.)

(590,6): ошибка 0019: каждое имя свойства в типе должнобыть уникальный.Имя свойства 'Description_Title' уже определено.

Например:

B.description.title отображается в столбец "Description_Title"

, а

C.description.shortTitle сопоставляется с тем же столбцом

1 Ответ

2 голосов
/ 29 августа 2011

Сделать класс Letter абстрактным

public abstract class Letter
{
    public string Name { get; set; }
}

public class LetterMap : EntityTypeConfiguration<Letter>
{
    public LetterMap()
    {
        HasKey(l => l.Id);

        //assuming discriminator column is "Type"
        Map<A>(a => a.Requires("Type").HasValue<byte>(1));
        Map<B>(b => b.Requires("Type").HasValue<byte>(2));
    }
}

public class BMap : EntityTypeConfiguration<B>
{
    public LetterMap()
    {
          HasOptional(b => b.description)
            WithMany()
            HasForeignKey(b=> b.descriptionId);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...