2009-12-18 70 views
1

我使用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,雖然由於分貝是陳舊的,直到請求結束,並提交到數據庫?

回答

1

如果您的實體的主鍵是identy列,這是正常行爲,因爲NHibernate必須將數據持久化到數據庫以獲取實體的ID,以便它可以將其放置在其會話中。所有後插入發生器都是這種情況。 如果不希望這樣的事情發生,也獲得您應選擇使用ORM風格發電機像希洛/序列希洛發電機

之一,在此深入瞭解更多的信息許多其他好處:

http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx

相關問題