2016-05-12 6 views
2

Ich habe ein 'Master' Projekt Visual Studio, die Mappings Entity Framework enthält ähnlich wie:Vererbung von EntityTypeConfiguration über verschiedene Projekte in Entity Framework

public class UserMap : EntityTypeConfiguration<User> 
{ 
    public UserMap() 
    { 
     // Table Mapping 
     ToTable("Users"); 
     this.Property(x => x.Username).HasColumnName("Username"); 


     // Other mapping goes here 
    } 
} 

Die User Einheit abgebildet wird, ist nur eine einfache POCO:

public class User { 
    public string Username { get; set; } 

    // Other properties omitted for brevity 
} 

ich habe ein zweites ‚Kind‘ VS Projekt/Anwendung (die das Master-Projekt verweist), das folgend ExtendedUser Entity/POCO hat, die auch EF abgebildet wird unter Verwendung von:

public class ExtendedUser : User { 

    // Extra navigation properties 
    public ICollection<Order> Orders { get; set; } 
} 

Diese Entität hat keine zusätzlichen Felder, aber verschiedene Beziehungssammlungen, die für diese Anwendung und nur für diese Anwendung spezifisch sind.

Mein Problem ist, dass ich das Mapping für die User im ersten VS-Projekt definiert übernehmen möchte. Die Master-Klasse User wird in mehreren anderen Projekten verwendet, so dass ich jegliche Duplizierung von Mappings vermeiden muss.

Wenn ich die Abbildung definieren als:

public class ExtendedUserMap : UserMap 
{ 
    public UserMap() 
    { 

    } 
} 

Dann kann ich keine der Eigenschaften ExtendedUser Referenz als Mapping des Typs EntityTypeConfiguration<User> nicht EntityTypeConfiguration<ExtendedUser>.

Offensichtlich kann ich nicht von zwei Klassen erben, also bin ich unsicher von einem geeigneten Weg zu erreichen, was ich tun möchte.

Wie kann ich ExtendedUserMap so definieren, dass ich die User Mappings verwenden und auch die Navigationseigenschaften für ExtendedUser?

Antwort

1

Sie können Ihre Basis-Mapping-Klasse etwas anders definieren:

public abstract class UserMapBase<TUser> : EntityTypeConfiguration<TUser> 
    where TUser : User 
{ 
    protected UserMapBase() 
    { 
     // Table Mapping 
     ToTable("Users"); 
     this.Property(x => x.Username).HasColumnName("Username"); 


     // Other mapping goes here 
    } 
} 

Jetzt können Sie eine Unterklassen wie so haben:

public class UserMap : UserMapBase<User> 
{ } 

public class ExtendedUserMap : UserMapBase<ExtendedUser> 
{ 
    public ExtendedUserMap() 
    { 
     // map ExtendedUser properties here. 
    } 
} 
Verwandte Themen