NHibernate 세션을 사용하여 개체를 데이터베이스에 유지하는 저장소 클래스가 있습니다. 기본적으로 리포지토리는 명시 적 트랜잭션을 사용하지 않습니다. 즉, 호출자가 관리해야합니다.NHibernate - 질의하기 전에 플러시 하는가?
[Test]
public void NHibernate_BaseRepositoryProvidesRequiredMethods()
{
using (var unitOfWork = UnitOfWork.Create())
{
// test the add method
TestRepo.Add(new TestObject() { Id = 1, Name = "Testerson" });
TestRepo.Add(new TestObject() { Id = 2, Name = "Testerson2" });
TestRepo.Add(new TestObject() { Id = 3, Name = "Testerson3" });
// test the getall method
var objects = TestRepo.GetAll();
Assert.AreEqual(3, objects.Length);
// test the remove method
TestRepo.Remove(objects[1]);
objects = TestRepo.GetAll();
Assert.AreEqual(2, objects.Length);
// test the get method
var obj = TestRepo.Get(objects[1].Id);
Assert.AreSame(objects[1], obj);
}
}
문제는 개체 목록이 GetAll
메서드에서 반환하기 때문에 라인
Assert.AreEqual(3, objects.Length);
가 비어 테스트를 실패입니다 : 내 NHibernate에 배관을 테스트하기 위해 다음과 같은 단위 테스트가 있습니다. 세 객체를 삽입 한 직후 세션을 수동으로 플러시하면 해당 부분이 통과합니다. 나는 세션에서 기본 FlushMode를 사용하고 있으며 설명서에 따르면 모든 객체를 검색하기 위해 쿼리를 실행하기 전에 플러시해야한다고 명시되어 있지만 분명히 아닙니다. 내가 누락 된 것?
편집 : 단위 테스트 시나리오에서 Sqlite를 사용하고 있습니다. 차이가 있다면.