2011-12-25 40 views
0

我剛開始學習溫莎城堡。對於是否應該在Nhibernate ISession之上添加另一個工作單元有疑問。我們應該使用我們自己的工作單位在Nhibernate ISession頂部

我在windsor教程中找到了這個。

http://docs.castleproject.org/Windsor.Windsor-Tutorial-Part-Six-Persistence-Layer.ashx

「還有一個重要的是,雖然我們只是做了隱形的效果。通過註冊組件,我們不只是告訴溫莎如何創建它們。溫莎也將採取妥善銷燬情況進行護理我們從而負責管理它們的整個生命週期,從外行的角度來看,Windsor將在兩個對象不再使用時處理這兩個對象,這意味着它將把我們對ISession所做的更改刷新到我們的數據庫,並且它將清理該ISessionFactory。而我們得到這一切是免費的。「

它的聲音,我們不需要提交我們對數據庫的變化,溫莎會照顧那個。我假設Windsor會在頁面關閉或完全加載後執行此操作。

現在我看到其他人加入另一個工作組在這樣一個Nhibrenate的頂部。

只是好奇哪一個被認爲是最好的做法呢?

  UnitOfWork unitOfWork = new UnitOfWork(session); 
      Repository<Truck> repository = new Repository<Truck>(unitOfWork.Session); 
      Truck truck = CreateTruck(string.Format("Truck {0}", i + 1), 1000); 
      repository.Add(truck); 
      unitOfWork.Commit(); 


      namespace RepositoryPattern.Data.Orm.nHibernate 
      { 
       public class UnitOfWork : IUnitOfWork 
       { 
        public ISession Session { get; private set; } 
        private readonly ITransaction _transaction; 

        public UnitOfWork(ISession session) 
        { 
         Session = session 
         Session.FlushMode = FlushMode.Auto; 
         _transaction = Session.BeginTransaction(IsolationLevel.ReadCommitted); 
        } 

        public void Commit() 
        { 
         if (!_transaction.IsActive) 
         { 
          throw new InvalidOperationException("Oops! We don't have an active transaction"); 
         } 
         _transaction.Commit(); 
        } 

        public void Rollback() 
        { 
         if (_transaction.IsActive) 
         { 
          _transaction.Rollback(); 
         } 
        } 

        public void Dispose() 
        { 
         if (Session.IsOpen) 
         { 
          Session.Close(); 
         } 
        } 
       } 
      } 

回答

0

不確定,但我不會去這條路線。看起來過於複雜。是否有一個你不想使用的理由(session.open ..){...}?

相關問題