2015-07-09 3 views
3

У меня странная проблема с наследованием TPC с использованием C# Entity Framework Codefirst и Fluent Api. У меня есть 3 класса с именем Person, Invoice и PeriodicInvoice, как вы можете видеть ниже. Вот краткое изложение моего кода:Ошибка наследования TPC

Invoice класс и его класс конфигурации:

public class Invoice : InvoiceBase 
{ 
    public Person User { get; set; } 
} 

public class InvoiceConfig : EntityTypeConfiguration<Invoice> 
{ 
    public InvoiceConfig() 
    { 
     this.Map(m => { m.MapInheritedProperties(); m.ToTable("Invoices"); }); 
    } 
} 

PeriodicInvoice класс и его конфигурация:

public class PeriodicInvoice : InvoiceBase 
{ 
    // Some extra properties. 
} 

public class PeriodicInvoiceConfig : EntityTypeConfiguration<PeriodicInvoice> 
{ 
    public PeriodicInvoiceConfig() 
    { 
     this.Property(x => x.SuspendOnExpire).IsRequired(); 
     this.Map(m => { m.MapInheritedProperties(); m.toTable("PeriodicInvoices"); }); 
    } 
} 

Когда я запускаю код, появляется эта ошибка:

Ассоциация «Invoice_User» между сущностью типы «Счет-фактура» и «Лицо» недействительны. В иерархии TPC независимые ассоциации допускаются только к наиболее производным типам.

Я знаю, что это означает, что я должен включать в себя свойство User к классу PeriodicInvoice и не использовать его в классе Invoice.

Но, нет ли другого способа решить эту проблему? Спасибо.

ответ

3

В наследовании TPC у вас не может быть поля в родительском классе, которое указывает на другую таблицу, потому что вы пытаетесь указать две таблицы в другую таблицу и одну таблицу, которая пытается указать одну из этих двух таблиц, используя только одну внешнюю ключ (и это невозможно!).

Предлагаю вам использовать TPT. This link может вам помочь.

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