我使用nhiberate,存儲庫模式。困惑爲什麼我的實體變化反映沒有提交?
例如MakePersistance樣子:
public T MakePersistent(T entity)
{
Session.Save(entity);
return entity;
}
在HTTP模塊的開始請求:
ISession session = NHibernateHelper.OpenSession();
session.BeginTransaction();
CurrentSessionContext.Bind(session);
結束請求:
ISession session = CurrentSessionContext.Unbind(
NHibernateHelper.SessionFactory);
if (session != null)
try
{
session.Transaction.Commit();
}
catch (Exception ex)
{
session.Transaction.Rollback();
//Server.Transfer("...", true);
}
finally
{
session.Close();
}
等各個頁面的請求時,交易開始和結束。
從我所瞭解的情況來看,這意味着如果我更新一個實體,然後在更新後查詢該實體,那麼查詢將返回實體的原始狀態,因爲更新沒有提交到數據庫。
但是,我測試(並在SQL分析器中查看)數據庫執行更新,然後檢索相同的實體是新鮮/最新的。
所以我做:
Entity e = EntityDao.GetById(1);
// e.count outputs 0
e.Count += 1;
// e.count outputs 1 as expected
EntityDao.MakePersistant(entity);
entity = EntityDao.GetById(1); // getting from the db again
// e.count ouputs 1 ***
它不應該是0,雖然由於分貝是陳舊的,直到請求結束,並提交到數據庫?