2017-05-29 4 views
0

Ich habe mich gefragt, wie folgendes zu tun: wie diese Ich habe eine Basisklasse:Entity Framework besser Tabelle/Spalte zählen

public class BaseClass 
{ 
    [Key] 
    public Guid Id { get; set; } 

    [MaxLength(512)] 
    public string Description { get; set; } 

    public ICollection<Article> Articles { get; set; } 
} 

Und dann habe ich zwei Klassen, die von der Basis erben:

public class ClassA : BaseClass 
{ 
    // some properties 
} 

public class ClassB : BaseClass 
{ 
    // some properties 
} 

Jetzt erzeugt dies die Artikel-Datenbank mit Spalten für jede Klasse: ClassA_Id, ClassB_Id ...

gibt es nicht einen Weg um weniger Spalten/Tabellen zu erzeugen? Denn wenn die Anwendung wächst, wird es mehr und mehr Spalten haben, die die meiste Zeit Null sind.

Ich habe versucht, einige Mapping, aber es erstellt eine separate Tabelle für jede Klasse (wie: ClassAArticles, ClassBArticles, ...) Oder beschwert sich, dass es nicht die gleiche Spalte für 2 Entitäten zugeordnet haben kann.

+0

Was sind die Typen/Nummern der zusätzlichen Eigenschaften? Werden sie in den abgeleiteten Klassen gemeinsam verwendet? –

Antwort

0

In Ihrem Kontext können Sie OnModelCreating a Map hinzufügen, indem Sie definieren, dass Ihre Klassen aus der Basis generiert werden.

Wird etwas wie dieses sein.

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    modelBuilder.Entity<BaseClass>() 
     .Map(m => m.ToTable("BaseClass")) 
     .Map<ClassA>(m => m.ToTable("ClassA")) 
     .Map<ClassB>(m => m.ToTable("ClassB")); 
} 

Dies wird 3 Tabellen erzeugen, wo KlasseA und ClassB nur Id-Feld haben, die die ID-Feld der Basistabelle verweist.