NHibernate没有任何侵入性的阶级装饰?

NHibernate没有任何侵入性的阶级装饰?,nhibernate,key,composite,Nhibernate,Key,Composite,NHibernate不需要对POCO进行太多的修饰,但是必须在我的域对象中放置代理密钥让我感觉有点不舒服。称我过于热心——我更喜欢“思想一致”——但我的域对象肯定应该使用自然键,而不必求助于代理 我不介意在数据库中使用代理,但我真的不想篡改我的工作域模型。我如何规避这个问题 我是否用复合键对域类进行子类化,对它们进行调整,以便NH可以使用代理键,但我的域并不明智,只看到超类 class DomainClass { private ParentClass1 _p1; // These t

NHibernate不需要对POCO进行太多的修饰,但是必须在我的域对象中放置代理密钥让我感觉有点不舒服。称我过于热心——我更喜欢“思想一致”——但我的域对象肯定应该使用自然键,而不必求助于代理

我不介意在数据库中使用代理,但我真的不想篡改我的工作域模型。我如何规避这个问题

我是否用复合键对域类进行子类化,对它们进行调整,以便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看到了NHDomainClass并可以使用代理项,但是,由于它适应了DomainClass,所以它仍然可以在特定于模型的代码中用作可行的DomainClass。我相当肯定这会起作用,只是想确保我没有遗漏一些明显更简单的方法,这些方法可以在很短的时间内实现同样的效果


谢谢。

我不确定您是否希望为添加代理密钥而对常规域对象进行子类化。由于需要使用Nhibernate熟悉的类型名,因此查询中会出现大量代码噪音

session.CreateCriteria(typeof(NHDomainClass));
相反,我可能会满足于将代理密钥(为了便于复制和合并,我更喜欢使用guid)隐藏为常规域类中的私有字段或受保护的属性