2009-03-26 5 views
0

NHibernateのはPOCOSのあまり装飾を必要とするが、私のドメインオブジェクトに代理キーを入れて持つことは、私は少し病気に感じることができません。あまりにも熱心だと呼びます。私は理想的には一貫していますが、私のドメインオブジェクトは確かに自然なキーで動作し、代理人に頼る必要はありません。NHibernateに介入クラス装飾はありませんか?

私は私のデータベースにサロゲートを使用して気にしないが、私は本当に私の作業ドメインモデルを改ざんする必要はありません。この問題を回避するにはどうすればよいですか?

は、私が唯一のスーパークラスを見て、NHは代理キーを使用することができますが、私のドメインはどれも-賢明であるようにそれらを適応させる、複合キーを持つドメインクラスをサブクラスですか?この(性急な、不自然な)例で

class DomainClass 
{ 
    private ParentClass1 _p1; // These two form a composite key 
    private ParentClass2 _p2; // 
    private int _i; 

    public int SomeProp 
    { 
     get { return _i; } 
    } 
} 

class NHDomainClass : DomainClass 
{ 
    private long _surrogateKey 
    private DomainClass _d; 

    public int SomeProp 
    { 
     get { return _d.SomeProp; } 
    } 
} 

、NHは、DomainClassを適合させるため、それはまだ機種固有のコードで実行可能なDomainClassとして使用することができ、NHDomainClassを見て、サロゲートを使用することができるが。私はこれがうまくいくと確信しています。ちょっとした時間で同じことを達成する明白な簡単な方法が欠けていないことを確認したいだけです。

ありがとうございました。

答えて

2

私はあなただけで代理キーを追加するには、通常のドメインオブジェクトをサブクラス化したいだろうとわかりません。 Nhibernateが慣れ親しんでいるような型名を使う必要があるので、あなたのクエリには多くのコードノイズが発生します。

session.CreateCriteria(typeof(NHDomainClass)); 

代わりに、私はおそらく、あなたの通常のドメインクラス内のプライベートフィールドとして代理キー(Iレプリケーションおよびマージと容易にするためにGUIDを好む)または保護されたプロパティを隠すために解決します。

関連する問題