2012-03-27 12 views
9

Mam obiekt bazowy, że nie chcę być odwzorowany w DB jako podmiot, chcę tylko właściwości mają zostać dodane do obiektu, który jest mapowany w DB:Dziedziczenie EF Code-First

niemapowany przedmiot (nie wiem czy to ma znaczenie ale baseobject jest w innym zespole):

public class BaseObject 
{ 
    public virtual string Prop1 { get; set; } 
    public virtual string Prop2 { get; set; } 
} 

Mapowany obiektu:

public class ChildObject : BaseObject 
{ 
    public virtual string Prop3 { get; set; } 
    public virtual string Prop4 { get; set; } 
    public virtual string Prop5 { get; set; } 
} 

Co jest zarejestrowany w DbContext

public DbSet<ChildObject> ChildObjects { get; set; } 

Co chciałbym zobaczyć w dB

table:ChildObject 
    col:Prop1 (from BaseObject) 
    col:Prop2 (from BaseObject) 
    col:Prop3 
    col:Prop4 
    col:Prop5 

Aby wznowić, co chcę zrobić, to mieć jedną tabelę w DB, który ma dziecko i właściwości bazowych.

Jest to błąd Jestem obecnie na:

typu „namespace.ChildObject” nie została odwzorowana. Sprawdź, czy typ nie zostało wyraźnie wyłączone przy użyciu metody lub danych NotMappedAttribute adnotacji Ignoruj. Sprawdź, czy typ został zdefiniowany jako klasa, nie jest prymitywny, zagnieżdżone lub ogólny, a nie odziedziczyć z EntityObject.

Kopałem, ale nie mogę tego zrobić.

Wszelkie pomysły?

EDIT:

@Kyle Trauberman ma rację, jednak z jakiegoś powodu nie wydaje się być problem z dziedziczenie z klasy bazowej w innym zespole. Po prostu to zrobiłem.

class BaseObjectClone : BaseObject { } /* BaseObject being in another assembly */ 

public class ChildObject : BaseObjectClone { 
    public virtual string Prop3 { get; set; } 
    public virtual string Prop4 { get; set; } 
    public virtual string Prop5 { get; set; } 
} 
+2

A zatem nie chcesz, aby właściwości zdefiniowane w klasie bazowej były odwzorowane na bazę danych? A może chcesz je zmapować? Co widzisz teraz, a co chcesz zobaczyć? –

+0

Przepraszam, może to być niejasne. Chodziło mi dont chcesz baseobject być odwzorowany jako inny podmiot, ale chcę, aby pokazać właściwości w obiekcie dziecięcej. –

+0

udało mi się rozwiązać mój podobny przypadek z moją odpowiedź [tutaj] (https://stackoverflow.com/a/45762308/1718832) – vk5880

Odpowiedz

10

Morteza Manavi ma blogu szczegółowo, jak to zrobić:

http://weblogs.asp.net/manavi/archive/2011/01/03/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines.aspx

Zasadniczo, trzeba zastąpić OnModelCreating w swojej DbContext i nazywają MapInheritedProperties() dla każdej z tabel podrzędnych.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<BankAccount>().Map(m => 
    { 
     m.MapInheritedProperties(); 
     m.ToTable("BankAccounts"); 
    }); 

    modelBuilder.Entity<CreditCard>().Map(m => 
    { 
     m.MapInheritedProperties(); 
     m.ToTable("CreditCards"); 
    });    
} 
+0

Morteza mieliśmy całą serię postów na temat dziedziczenia, które należy sprawdzić. Oto część 1: http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per- hierarchia-tph.aspx –

+0

Przeszedłem już przez ten artykuł, ale być może brakuje mi czegoś, ponieważ nadal wyrzuca błąd na ChildObject –

+1

Byłoby pomocne wiedzieć, jaki błąd otrzymujesz. –

Powiązane problemy