Wie teste ich die NHibernate FetchMode.Eager richtig?
-
06-07-2019 - |
Frage
Gibt es eine Möglichkeit einen Integrationstest zu schreiben, um zu testen, dass die FetchMode.Eager richtig funktioniert? Ich möchte sicherstellen, dass es nicht in die Datenbank gehen, wenn ich MySubObject abgerufen werden.
Der Code:
public MyObject GetEager(string name)
{
return Session
.CreateCriteria(typeof(MyObject))
.SetFetchMode("MySubObject", FetchMode.Eager)
.Add(Restrictions.Eq("Name", name))
.UniqueResult<MyObject>();
}
Lösung
Sie können auch NHibernateUtil.IsInitialized
verwenden ... wie in diesem Beitrag erklärt
http://nhibernate.info/doc/howto /various/lazy-loading-eager-loading.html
Andere Tipps
Wie wäre es so etwas wie dieses;
MyObject testObject = new MyObject();
testObject.GetEager("a name");
testObject.Session.Close();
Assert.AreEqual(testObject.MySubObject.Id, 3425);
Durch die Sitzung zu schließen und dann das dazugehörige Objekt versucht, zuzugreifen, wenn das Objekt nicht mit Spannung ist geladen wird es eine Ausnahme werfen. Conversly wenn es eagrly geladen NHibernate wird nicht auf die Datenbank zuzugreifen versuchen, und so wird nicht die Ausnahme aus.