按照here描述的技术,我能够填充为其子项使用自定义集合的域对象。相关属性映射如下所示:
<component name="Contacts" class="My.CustomList`1[[Domain.Object, DomainAssembly]], MyAssembly">
<set name="InnerList">
<key column="PARENT_ID" />
<one-to-many class="Contact" />
</set>
</component>
我的自定义集合类将InnerList属性公开为ICollection
,如下所示:
protected System.Collections.ICollection InnerList
{
get
{
return this;
}
set
{
Clear();
foreach (DomainObject o in value)
{
Add(o);
}
}
}
这就像从数据库加载数据的魅力,而不必放弃我相当有用的自定义集合类。
然后我继续尝试实现保存,并按照建议given in this thread,决定在事务中包含对NHibernate的每个调用。
现在,当我提交跟踪加载时,NHibernate会抛出InvalidCastException
:“无法转换类型为'My.CustomList`1 [Domain.Object,DomainAssembly]'的对象以输入'Iesi.Collections.ISet' 。“
有没有办法以我期望的方式完成这项工作?
编辑:
在Raphael提供的带领下,我尝试切换到ICollection<T>
,当我提交事务时,它给了我一个不同的InvalidCastException
:无法转换类型为'My.CustomList`1 [Domain]的对象。对象]''键入'NHibernate.Collection.IPersistentCollection'。
答案 0 :(得分:1)
将属性更改为
类型IList<T>