Я использую первый подход Entity Framework 4 CTP5, и у меня есть сопоставление Table per Hierarchy (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; }
}
Стандартное соглашение сопоставляет это со следующими столбцами:
- Id
- Article1
- Статья 2
- customer1
- Customer2
- Производитель
- Заказ
- Тип
Я хочу, чтобы EF4 делил общие свойства, в результате получилось следующее:
- Id
- Статья
- Клиент
- Производитель
- Заказ
- Тип
Помимо сокращенного количества столбцов, это имеет то преимущество, что можно искать записи на основе статьи, например, без необходимости знать, какие типы имеют свойство Article.
Я попытался сопоставить каждое общее свойство с тем же столбцом:
modelBuilder.Entity<B>().Property(n => n.Article).HasColumnName("Article");
modelBuilder.Entity<C>().Property(n => n.Article).HasColumnName("Article");
но это заставило следующее исключение:
Указанная схема недействительна. Ошибки: (36,6): ошибка 0019: каждое имя свойства в типе должно быть уникальным. Название свойства "Article" уже определено.
Кто-нибудь знает, как обойти это правило проверки?