2013-04-29 7 views
3

Два класса в codefirstEntity Framework Code First - Invalid имя столбца дискриминатор

public partial class BaseEntity 
{ 
    public int ID { get; set; } 
} 

public partial class Fund : BaseEntity 
{ 
    public int Name { get; set; } 
} 
public partial class InvestorFund : BaseEntity 
{ 
    public int FundID { get; set; } 
} 

Mapping классов

this.Property(t => t.ID).HasColumnName("FundID"); 

My Code First Регистрация SQL Query

from fund in context.Funds 

join investorFund in context.InvestorFunds on fund.ID equals investorFund.FundID 

Выдает Invalid column name Discriminator

ответ

10

Вы должны сообщить Code First, как эти классы относятся к таблицам. Есть три варианта:

  • Таблица для каждого типа (TPT) будет означать поля, определенные в фонд и InvestorFund бы в свои собственные таблицы и свойства, определенные на BaseEntity бы к столу с именем BaseEntity. Запрос будет медленнее, поскольку каждый объект теперь должен комбинировать поля из нескольких таблиц.

    modelBuilder.Entity<Fund>().ToTable("Funds"); 
    modelBuilder.Entity<InvestorFund>().ToTable("InvestorFunds"); 
    
  • Таблица за иерархию (ТРН) будет означать, что фонд, InvestorFund и BaseEntity свойство будет все быть объединена в одну таблицу с именем BaseEntity и дополнительное поле необходимо будет указать, какую строку является типом. Это дополнительное поле называется дискриминатором .

    modelBuilder.Entity<BaseEntity>() 
        .Map<Fund>(m => m.Requires("Discriminator").HasValue("F")) 
        .Map<InvestorFund>(m => m.Requires("Discriminator").HasValue("I")); 
    
  • Таблица для каждого типа бетона (TPC) будет означать, что фонд и InvestorFund имеет свои собственные таблицы, которая будет также включать в себя любые поля, необходимые для их базовых классов.

    modelBuilder.Entity<Fund>().Map(m => { 
           m.MapInheritedProperties(); 
           m.ToTable("Funds"); 
    }); 
    modelBuilder.Entity<InvestorFund>().Map(m => { 
           m.MapInheritedProperties(); 
           m.ToTable("InvestorFunds"); 
    }); 
    
+0

Таблица на тип (TPT) – karthi

+0

Вы должны иметь возможность использовать строки кода, которые я написал в TPT, чтобы избежать этой ошибки. – DamienG

+0

В этом примере «Тип» должен быть «Дискриминатор». –

0

Вам необходимо запустить миграции.

Перейдите в консоль диспетчера пакетов, затем введите update-database после включения автоматической миграции.

+1

Это не имеет ничего общего с Миграциями. – Jalal

Смежные вопросы