我正在尝试在 NHibernate 中映射域模型。领域模型是用我认为的 DDD 风格实现的。映射主要工作,但是当我尝试在集合上使用集合过滤器时,我得到一个异常,它说:集合未被引用。
我知道问题出在我如何实现该集合。我的问题:是否可以在以这种方式实现的集合上使用 nHibernate 中的集合过滤器,或者我应该忘记它,即 nHibernate 不能使用它。
代码如下:
Person
{
IList<Address> _addresses = new List<Address>();
public string FirstName {get; set;}
...
public void addAddress(Address address)
{
// ... do some checks or validation
_addresses.Add(address);
}
public void removeAddress(Address address) {...}
public ReadOnlyCollection<Address> Addresses
{
get { return new ReadOnlyCollection<Address>(_addresses); }
}
}
主要问题是我不想公开内部地址集合。其他一切都有效,我使用 field.camelcase-underscore 访问,因此 nHibernate 直接与该字段交互。我一直在研究 Hibernate in Action 这本书,现在我在第 7 章,它处理集合过滤器。
有没有办法解决。我已经通过像这样公开内部集合来使其工作:
public ReadOnlyCollection<Address> Addresses
{
get { return _addresses; }
}
但我真的不想这样做。
帮助真的很感激。
吉德