Entity Framework Table для каждого конкретного типа внешнего ключа
У меня есть следующая иерархия классов
public class A
{
public int Id { get; set; }
public virtual IColection<B> Items {get; set; }
}
public abstract class B
{
public int Id {get; set; }
public A Parent {get; set; }
}
public class C : B
{
public String Name {get; set; }
}
Я пытаюсь использовать таблицу для конкретного отображения иерархии типов и следующий код в DataContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<C>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("C_Table");
});
}
Entity Framework по-прежнему создает две таблицы. Один для класса B, который включает в себя поле Id и A_Id для внешнего ключа. Второй для C со всеми полями, кроме ссылки на A.
Можно ли настроить EF, чтобы не создавать таблицы для B? Я хочу иметь отдельную таблицу для каждого производного класса, но без общей таблицы.
0 ответов
В ядре EF, modelBuilder.Ignore
сделаю волшебство
modelBuilder.Ignore<B>();
Не уверен, что EF 5-6 имеет аналогичную функцию.
НО: Пройдите пост Наследование с EF Code First - Таблица на иерархию (TPH), вы найдете:
Эта картографическая стратегия является победителем с точки зрения как производительности, так и простоты. Это наиболее эффективный способ представления полиморфизма - как полиморфные, так и неполиморфные запросы работают хорошо - и его даже легко реализовать вручную. Специальная отчетность возможна без сложных объединений или союзов. Схема эволюции проста.
Так, по соображениям производительности, возможно, вы можете рассмотреть вышеупомянутый подход, но это действительно зависит от вашего реального проекта. если у вас есть тонны детских классов, то разбейте их на таблицы, как вы хотели.