2012-03-27 5 views
0

私は弁別者なしで同じテーブルのための牽引エンティティを作成したいと思います。 私のテーブルがPersonを表すようにしてください.2人のエンティティクラスPerson: とPersonExtを作成したいと思います。 Personには、name、Age、Adress extのようなほとんどのテーブルの列が含まれます。 PersonExtクラス はPersonクラスから除外され、Personテーブルの残りの列にマッピングされます。私はPersonExtのマッピングファイルを作成したくはありません。マッピングファイルはPersonに再度マッピングされますが、まだマッピングされていない残りのカラムのマッピングだけです。 NHibrateで可能ですか?もしそうなら、あなたはどのように説明できますか?NHibrnateマッピング

Public Class Person 
{ 
    public virtual string Name {get;set;} 
    public virtual int Age {get;set;} 
    public virtual string Address{get;set;} 
} 

Public class PersonExt:Person 
{ 
    public virtual int NumOfChildren {get;set;} 
    public virtual string FamilyStatus {get;set;} 
    ...... 
} 
+0

Fluent NHibernateでは、ClassMapの継承でこれを行うことができますが、まっすぐ上のxmlマッピングで行うことはできません。 –

+1

@ColeW - 'joined-subclass'要素を使用することができます - http://simsonlive.wordpress.com/2008/03/09/how-inheritance-works-in-hibernate/ – SeanCocteau

+0

継承階層を作成する@SeanCocteau同じテーブルにマップするため、schemaexportを混乱させる可能性があります。 ColeWは答えが正しい – Firo

答えて

0

はい、Fluentマッピングを使用します。例えば

public abstract class PersonBaseMap<TPerson> : ClassMap<TPerson> where TPerson : Person 
{ 
    public PersonBaseMap() 
    { 
     Map(p => p.Name); 
     Map(p => p.Age); 
     Map(p => p.Address); 
    } 
} 

public class PersonMap : PersonBaseMap<Person> 
{ 
} 

public class PersonExtMap : PersonBaseMap<PersonExt> 
{ 
    public PersonExtMap() 
    { 
     Map(p => p.NumOfChildren); 
     Map(p => p.FamilyStatus); 
    } 
}