說說IUnitOfWork~認識IUnitOfWork,為什么要出現IUnitOfWork接口


回到目錄

第一講 認識IUnitOfWork,為什么要出現IUnitOfWork接口
第二講 Linq to Sql與EntityFrameworks中的SubmtChanges()發生了什么事
第三講 方法完整性與統一提交不沖突
第四講 DbContext對象的創建應該向BLL層公開
第五講 我的IUnitOfWork+Repository架構

     今天愉點時間,說說IUnitOfWork,它事實上是NHibernate上的東西,這里只是借一下它的思想,把咱們的EF和LinqToSql也優化一下,呵呵!對於IUnitOfWork它的中文是操作單元的意思,顧名思義,就是將多個操作放在一個單元中,把操作原子化,概念上有點像事務,但事實上並不是,它主要是指對數據庫通信來說,統一完成一次提交,這對於優化系統的性能是非常必要的,接下來,我會分5講來說明一下IUnitOfWork。

一  認識IUnitOfWork

我們一般對IUnitOfWork接口會定義如下元素:

    /// <summary>
    /// 工作單元
    /// 提供一個保存方法,它可以對調用層公開,為了減少連庫次數
    /// </summary>
    public interface IUnitWork
    {
        /// <summary>
        /// 直接提交到數據庫
        /// </summary>
        void Save();
        /// <summary>
        /// 是否不提交到數據庫,默認值設為false,即提交到數據庫
        /// 它通常於數據上下文基類去實現
        /// </summary>
        /// <returns></returns>
        bool IsNotSubmit { get; set; }
    }

而這個接口往往由數據上下文去實現,我以entityframeworks為例,當你建立一個EDMX數據模型后,你可以再建立一個類文件來作為它的分部類,並實現IUnitWork接口,代碼如下:

namespace Domain.Entities
{
    public partial class backgroundEntities : Domain.Core.IUnitWork
    {
        #region IUnitWork 成員

        public void Save()
        {
         this.SaveChanges();
        }

        public bool IsNotSubmit
        {
            get;
            set;
        }
#endregion
    }
}

而對於調用方來說,它通常是在具體的Repository類中去實現的,最常見的就是“構造器注入”的方式,看代碼:

事實上,在建立OrderRepository實例時,需要將實現了IUnitWork接口的數據上下文對象傳進來,然后統一進行操作。在BLL層調用DAL層時,你可以將多個DAL層的Repository對象進行組件調用,只要保證你的IUnitwork上下文對象是唯一的就可以了。

二  為什么要出現IUnitOfWork接口

對於這個問題,一句話,就是為了減少與數據庫通訊的次數,這一點在以后的課程中會着重講解的,今天就不多說了!

祝各位晚安!

回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM