获取“无法初始化集合”在SharpDevelop中调试NUnit测试时出现错误

本文关键字:测试 NUnit 调试 错误 SharpDevelop 初始化 集合 获取 | 更新日期: 2023-09-27 18:11:45

当尝试使用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();
    }
}

获取“无法初始化集合”在SharpDevelop中调试NUnit测试时出现错误

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没有正确的外键列,无法加载Holdings。您可以通过显式指定列

来解决这个问题。
    HasMany(x => x._holdings)
        .Column("f_id")     // same as in Holding
        .Cascade.All();