NHibernate Custom Collections hack在事务之外工作,但不在内部

时间:2010-09-07 20:37:00

标签: nhibernate collections

按照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'。

1 个答案:

答案 0 :(得分:1)

将属性更改为

类型
IList<T>