没有加载NHibernate惰性集合

时间:2014-03-21 09:39:23

标签: c# nhibernate fluent-nhibernate

我有几个通过NHibernate和底层数据库打包的类。 Fir exmaple,按照以下方式调用类:

class Parent {
  public virtual int Id {get;set;}
  public virtual string Name {get;set;}
  public virtual IList<Child> Children {get;set;}
}

class Child {
  public virtual int Id {get;set;}
  public virtual string Name {get;set;}
  public virtual IList<Child> Children {get;set;}
}

当然我有mappign,它在ASP.NET应用程序中运行良好。现在我想引入单元测试并遇到奇怪的错误:在测试设置方法中创建了一些测试数据(即Parent)及其Id存储在测试类中。在测试方法中,我要求我的repo通过此Id获取我的实体,并返回NNibernate代理对象(如果我记得正确的名为Bag)。当我试图访问我的孩子时,我得到了异常NHibernate.LazyInitializationException : Initializing failed to lazily initialize a collection of role

我在这里阅读了similr问题,但所有人都建议“只是不要关闭会话”。我做不到。有没有办法在测试数据创建时检索此集合以便将来访问它?

1 个答案:

答案 0 :(得分:0)

如果您坚持使用此测试模式,您唯一的选择是将在设置中创建的对象重新附加到测试方法中的会话。

我建议使用Session.Lock(object, LockMode.None),但请查看此问题和答案以获取更多详细信息:Attaching a disconnected object to an NHibernate session; best practice?