Entity Framework 4.1: использование TPH и сопоставление свойств с существующими столбцами базы данных - PullRequest
1 голос
/ 21 апреля 2011

Я получил эту простую иерархию классов;

public class A 
{  
 [Key]
 public int Id { get; set; }
}  

public class B : A 
{
 public string Name { get; set; }
}

public class C : A 
{
 public string Name { get; set; }
}

Использование TPH приведет к тому, что таблица будет выглядеть примерно так:

Таблица A, поля Id, Name, Name1, Discriminator.

Я хочу, чтобы свойства имен классов B и C отображались в одно и то же поле, т. Е. Name, используя эти сопоставления.

Property(x => x.Id)
  .HasColumnName("Id");

Map<B>(m =>
{
    m.Properties(p => new
    {
        Name = p.Name,
    });
});

Map<C>(m =>
{
    m.Properties(p => new
    {
        Name = p.Name,
    });
});

Как я могу убедиться в том, что сопоставим с тем же столбцом для моего свойства подтипов (B и C) Name? Есть ли HasColumnName для использования с коллекцией Properties?

1 Ответ

2 голосов
/ 21 апреля 2011

THP не позволяет вам совместно использовать свойства между объектами, если свойство не находится в базовом классе.Используя TPH, свойство совместно используется всеми реализациями или принадлежит одной из специализированных реализаций.

Поместите свойство Name в базовый класс, и это должно решить вашу проблему.

...