NHibernate没有任何侵入式的装饰?

时间:2009-03-26 16:06:42

标签: nhibernate key composite

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。我很确定这会起作用,只是想确保我没有错过一些明显的简单方法,它可以在很短的时间内完成同样的事情。

感谢。

1 个答案:

答案 0 :(得分:2)

我不确定您是否想要将常规域对象子类化以添加代理键。您最终会在查询中产生大量代码噪音,因为您需要使用Nhibernate熟悉的类型名称。

session.CreateCriteria(typeof(NHDomainClass));

相反,我可能会考虑隐藏代理键(我更喜欢guids以便于复制和合并)作为常规域类中的私有字段或受保护属性。