継承

2016-05-12 14 views
2

私はEntity Frameworkのが含まれている 'マスター' のVisual Studioプロジェクトがに似マッピングがあります。継承

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


     // Other mapping goes here 
    } 
} 

マッピングされているUser実体が単純なPOCOです:

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

    // Other properties omitted for brevity 
} 

次のExtendedUser Entity/POCOを持ち、EFを使用してマッピングされた2番目の '子' VSプロジェクト/アプリケーション(マスタープロジェクトを参照しています)があります。

このエンティティには余分なフィールドはありませんが、そのアプリケーション固有のさまざまなリレーションシップコレクションがあります。

私の問題は、最初のVSプロジェクトでUserのために定義されたマッピングを継承したいということです。マスターUserクラスは他のいくつかのプロジェクトで使用されるので、マッピングの重複を避ける必要があります。

Iのようにマッピングを定義する場合:

public class ExtendedUserMap : UserMap 
{ 
    public UserMap() 
    { 

    } 
} 

マッピングはタイプEntityTypeConfiguration<User>ないEntityTypeConfiguration<ExtendedUser>であるようそれからExtendedUser特性のいずれかを参照することはできません。

明らかに私は2つのクラスから継承することはできませんので、私がやりたいことを達成するための適切な方法が不明です。

Userマッピングを使用でき、ExtendedUserのナビゲーションプロパティも含めることができるように、ExtendedUserMapを定義するにはどうすればよいですか?

答えて

1

あなたがわずかに異なるお使いのベースのマッピングクラスを定義することができます

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 
    } 
} 

を今、あなたはそうのようなサブクラスを持つことができます。

public class UserMap : UserMapBase<User> 
{ } 

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