Как совместно использовать общие имена столбцов в сопоставлении таблиц по иерархии (TPH)

Я использую первый подход Entity Framework 4 CTP5, и у меня есть сопоставление таблиц по иерархии (TPH). Некоторые из моих классов в иерархии имеют общие свойства.

public class BaseType
{
    public int Id { get; set; }
}

public class A : BaseType
{
    public string Customer { get; set; }
    public string Order { get; set; }
}

public class B : BaseType
{
    public string Customer { get; set; }
    public string Article { get; set; }
}

public class C : BaseType
{
    public string Article { get; set; }
    public string Manufacturer { get; set; }
}

Соглашение по умолчанию отображает это в следующие столбцы:

  • Идентификатор
  • Статья1
  • Статья2
  • Клиент1
  • Клиент2
  • Производитель
  • Заказ
  • Тип

Я хочу, чтобы EF4 имел общие свойства, чтобы в итоге получилось следующее:

  • Идентификатор
  • Статья
  • Клиент
  • Производитель
  • Тип заказа

Помимо уменьшенного количества столбцов, это имеет то преимущество, что можно искать записи на основе, например, Article, без необходимости знать, какие именно типы имеют свойство Article.

Я попытался сопоставить каждое общее свойство с тот же столбец:

modelBuilder.Entity<B>().Property(n => n.Article).HasColumnName("Article");
modelBuilder.Entity<C>().Property(n => n.Article).HasColumnName("Article");

, но возникло следующее исключение:

Указанная схема недействительна. Ошибки: (36,6): ошибка 0019: каждое имя свойства в типе должно быть уникальным. Имя свойства «Статья» уже определено.

Кто-нибудь знает, как обойти это правило проверки?

24
задан Prokurors 5 March 2014 в 11:31
поделиться