我从同一会话中两次加载一个实例,但是nhibernate返回两个我假设实例不在第一级缓存中的实例。什么会导致这种行为?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());
它按预期工作。
请问你Repository.Get方法样子? 你在哪里使用uow实例?它是否在库调用中使用? – 2010-01-18 18:58:33
我Repository.Get样子(为前): 使用(IUnitOfWork UOW = workManager.CreateReadOnly()){ .. } 交易和会话管理由工作工厂 – Marius 2010-01-18 19:11:56