流畅的NHibernate:在SharpDevelop中调试NUnit测试时出现“无法初始化集合”错误

时间:2011-10-18 02:10:06

标签: c# mysql nhibernate fluent-nhibernate

当使用NHibernate作为我的ORM工具时,尝试使用其他对象集合作为成员的非标记对象时,我收到以下错误。当顶级对象在所述集合中没有任何对象时,我收到的错误如“无法初始化集合:(大量SQL)”。我知道它引用的表是空的,因为它应该是集合,但NHibernate似乎试图填充它然后抛出异常,因为没有数据。

我希望集合简单地为null或空而不是暂停程序的执行,这对我来说看起来像NHibernate错误,但是我可能不正确地包装了ORM对象等,因为我相对较新技术。我的映射如下。 _holdings集合正在抛出错误。

public class FundMap : ClassMap<Fund>
{
    public FundMap() 
    {
        Id(x => x._fundID).GeneratedBy.Identity();
        Map(x => x._cik);
        Map(x => x._fundName);
        //TODO: get correct handling of HasMany relationships.
        HasMany(x => x._holdings)
            //.Inverse()
            .Cascade.All();
            //.Cascade.None();
    }
}

1 个答案:

答案 0 :(得分:3)

NH总是将自己的列表实现附加到在第一次访问时延迟加载内容的对象。它只在查询数据库后才知道集合真的是空的。

我的猜测是Holding的映射与hasmany的映射不匹配。考虑这样的事情:

public HoldingMap()
{
    References(x => x.Fund, "f_id");
}

public FundMap()
{
    HasMany(x => x._holdings)
        //.Column("fund_id")     // the default
        .Cascade.All();
}
Hasmany没有正确的外键列,也没有加载控股。您可以通过明确指定列来解决它

    HasMany(x => x._holdings)
        .Column("f_id")     // same as in Holding
        .Cascade.All();