2009-06-18 4 views
1

Есть ли способ написать интеграционный тест для проверки правильности работы FetchMode.Eager? Я хочу проверить, что он не будет в базе данных при получении MySubObject.Как правильно проверить NHibernate FetchMode.Eager?

Код:

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

ответ

3

Вы также можете использовать NHibernateUtil.IsInitialized ... как описано в этом посте

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

+0

О, это здорово! Похоже, это то, как ленивая загрузка должна была быть проверена, поэтому я переключил ответ на ваш ответ вместо Гарета. –

1

Как о чем-то вроде этого;

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

Закрывая сессию, а затем пытается получить доступ связанного объекта, если объект не охотно загружен он будет бросать исключение. Обратно, если он загружен с помощью eagrly, NHibernate не будет пытаться получить доступ к базе данных и поэтому не будет генерировать исключение.

+0

Да, это очень похоже на то, как мы в конечном итоге решить эту проблему. Мы использовали NHibernateSession.Current.Dispose() (где NHibernateSession - это класс-оболочка в нашей базовой архитектуре - архитектура s arp) –

 Смежные вопросы

  • Нет связанных вопросов^_^