Я дважды загружаю экземпляр из одного и того же сеанса, но nhibernate возвращает два экземпляра, что, как я предполагаю, означает, что объект не находится в кэше первого уровня. Что может вызвать такого рода поведение?
Тест:
using (new TransactionScope())
{
// arrange
NewSessionUnitOfWorkFactory factory = CreateUnitOfWorkFactory();
const int WorkItemId = 1;
const string OriginalDescription = "A";
WorkItemRepository repository = new WorkItemRepository(factory);
WorkItem workItem = WorkItem.Create(WorkItemId, OriginalDescription);
repository.Commit(workItem);
// act
using (IUnitOfWork uow = factory.Create())
{
workItem = repository.Get(WorkItemId);
WorkItem secondInstance = repository.Get(WorkItemId);
// assert
Assert.AreSame(workItem, secondInstance);
}
}
Обновление
Причиной такого странного поведения была строка кода:
NewSessionUnitOfWorkFactory factory = CreateUnitOfWorkFactory();
Когда я заменил его на этот заводской импл:
ExistingSessionAwareUnitOfWorkFactory factory = new ExistingSessionAwareUnitOfWorkFactory(CreateUnitOfWorkFactory(), new NonTransactionalChildUnitOfWorkFactory());
Работает как положено.