3
我有一个工作一对多的关系(不bbidirectional)其中资源有一套许多分配的实施,如下所示。这个域需要做更多的分配,这些分配只需要使用AddAllocation,RemoveAllocation等来管理它。所以从对象的角度来看,我想把那些与持久相关的额外逻辑放到不同的类AllocationCollection中,并且让这个额外的类对NHib透明。nhibernate自定义集合处理
我还想用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>
比利的文章正是我一直在寻找的!我看到[Colin Jack发布](colinjack.blogspot.com /.../ nhibernate-mapping-custom-collections.html)答复,他以我想的方式使用自定义集合提供解决方案,但比利的解决方案使用现在,对于我来说,查询的扩展方法对我来说是最小的入侵。谢谢! – Berryl 2010-01-29 16:52:00
我同意你关于在父类中保持集合维护(添加,删除) - 这是控制域内集合查询的问题,不会导致父类和违反SRP,同时容易映射出来,和你的链接地址。 – Berryl 2010-01-29 16:56:14
我几乎完全同意使用IEnumerable并控制添加和删除聚合根上的集合,但在时间集合(随时间变化的事物)的情况下,我相信一个自定义时间集合会非常好。我设想做这样的事情:contract.Rate [new DateTime(2001,01,01)]得到的速率“截至2001/01/01而不是contract.RateAsOf ...我认为这将是很好的,因为有您需要为每个类的每个“时态属性”添加很多时间行为。 – Loudenvier 2012-07-01 15:55:10