如何正确测试NHibernate FetchMode.Eager?

时间:2009-06-18 20:23:48

标签: c# .net nhibernate eager-loading

有没有办法编写集成测试来测试FetchMode.Eager是否正常工作?我想验证当我检索MySubObject时它不会进入数据库。

代码:

public MyObject GetEager(string name)
{
    return Session
        .CreateCriteria(typeof(MyObject))
        .SetFetchMode("MySubObject", FetchMode.Eager)
        .Add(Restrictions.Eq("Name", name))
        .UniqueResult<MyObject>();
}

2 个答案:

答案 0 :(得分:3)

您也可以使用NHibernateUtil.IsInitialized ...,如本文所述

http://nhibernate.info/doc/howto/various/lazy-loading-eager-loading.html

答案 1 :(得分:1)

这样的事情怎么样;

MyObject testObject = new MyObject();
testObject.GetEager("a name");
testObject.Session.Close();
Assert.AreEqual(testObject.MySubObject.Id, 3425);

通过关闭会话然后尝试访问关联的对象,如果对象没有被急切地加载,它将抛出异常。相反,如果它被轻微加载,NHibernate将不会尝试访问数据库,因此不会抛出异常。