nhibernate自定义集合处理

时间:2010-01-29 12:44:48

标签: nhibernate collections nhibernate-mapping

我有一对一的工作关系(非bbidirectional),其中Resource有一组实现的Allocations,如下所示。域需要通过AddAllocation,RemoveAllocation等管理它的分配集合做更多的事情。所以从对象的角度来看,我想把那些非持久性的额外逻辑放到另一个类,AllocationCollection和使这个额外的类对NHib透明。

我也想以TDD的方式充实AllocationCollection的响应能力,但我不确定如何重构现有的类,因此NHib仍然有效,映射明智。你会怎么做?

干杯, Berryl

模型

public class Resource {

    public virtual ICollection<Allocation> Allocations
    {
        get { return _allocations ?? (_allocations = new HashSet<Allocation>()); }
        private set { _allocations = value; } // Nhib will use this
    }
}

MAPPING

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" ...
<class xmlns="urn:nhibernate-mapping-2.2" name="Domain.Model.Resources.Resource, ... table="Resources">
....
<set cascade="all-delete-orphan" name="Allocations">
  <key foreign-key="Allocations_Resource_FK">
    <column name="ResourceId" />
  </key>
  <one-to-many class="Model.Allocations.Allocation, ... />
</set>

1 个答案:

答案 0 :(得分:6)

Billy McCafferty在NHibernate中使用自定义集合excellent series of articles。我个人不再使用自定义集合类型。我使用AddMyType,RemoveMyType等方法控制包含集合(即聚合根)的类的集合访问。我将集合公开为IEnumerable<MyType>。我已在IEnumerable<MyType>上使用扩展方法替换了其他自定义集合访问器。