c# - 流畅的 NHibernate : Getting a "could not initialize collection" error while debugging an NUnit test in SharpDevelop

标签 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();
    }
}

最佳答案

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();

关于c# - 流畅的 NHibernate : Getting a "could not initialize collection" error while debugging an NUnit test in SharpDevelop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801706/

相关文章:

c# - 看似相等的 float 变量不相等的例子

mysql - NetSuite 迁移

mysql - 对于 View 中的每个人?

NHibernate Session.Clear() 没有完成其工作?

c# - NHibernate 自动重命名 C# 中的列名

c# - child 和 parent 如何沟通

c# - 从字符串中解析一个值

mysql - 我可以通过添加新索引来改进这个查询吗,或者如何改进那个查询?

c# - 具有非空外键(HasMany)的流畅 nhibernate 映射

c# - 跳转到 Visual Studio 中的循环开始/结束快捷方式?