【问题标题】:NHibernate without any intrusive class decoration?NHibernate 没有任何侵入性的类装饰?
【发布时间】:2009-03-26 16:06:42
【问题描述】:

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 key composite


    【解决方案1】:

    我不确定您是否希望将常规域对象子类化以添加代理键。您最终会在查询中遇到很多代码噪音,因为您需要像这样使用 Nhibernate 熟悉的类型名称。

    session.CreateCriteria(typeof(NHDomainClass));
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多