Pergunta

Existe alguma maneira de escrever um teste de integração para testar se a FetchMode.Eager funciona corretamente? Eu quero verificar se ele não está indo para o banco de dados quando eu recuperar MySubObject.

O código:

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

Solução

Você também pode usar NHibernateUtil.IsInitialized ... como explicado neste post

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

Outras dicas

Como sobre algo como isso;

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

Ao fechar a sessão e, em seguida, tentar acessar o objeto associado se o objeto não é ansiosamente carregada ele irá lançar uma exceção. Conversly se for eagrly carregado NHibernate não tentará acessar o banco de dados e, portanto, não irá lançar a exceção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top