<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      說說IUnitOfWork~DbContext對象的創建應該向BLL層公開

      回到目錄

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

      在EF中,數據上下文通常是DbContext或者ObjectContext,而在linq to sql中數據上下文則是DataContext,它們的作用是建立一個數據庫映射對象ORM,以更加方便的操作數據庫,而它們的創建工作,我在很長一段時間將它約束在DAL層,對BLL層不公開創建方法,但當我對.net了解更多之后,覺得將數據上下文的創建工作公開到BLL層是很有必要的,最起碼在程序性能上及原子化操作上很有必要。

      原來我們在BLL層調用一個添加操作時,需要在DAL層先去定義這個實現,即使這個實體只存在一個添加操作,你也要去實現一下,這無疑加大了代碼量,像這樣:

       public class ProductRepository : TestBase<Product>
          {
              #region Constructors
              public ProductRepository() { }
      
              public ProductRepository(IUnitOfWork db) : base((TestDataContext)db) { }
              #endregion
      
              /// <summary>
              /// 一個方法,也要建立這個repository,有點壞味道
              /// </summary>
              /// <param name="entity"></param>
              public override void Insert(Product entity)
              {
                  base.Insert(entity);
              }
          }

      而,如果我們將數據上下文創建的工作公開到BLL層,那結果就不一樣了,再配合IUnitOfWork思想,實現在BLL層對DAL方法的整合,實現向數據庫發送一次連接請求,這種感覺,酷D了,呵呵。

      public abstract class BLLBase
          {
              protected IUnitOfWork IUnitOfWork { get; private set; }
              public BLLBase()
                  : this(null)
              {
      
              }
              public BLLBase(IUnitOfWork iUnitOfWork)
              {
                  IUnitOfWork = iUnitOfWork;
              }
              protected ICompleteRepository<T> LoadRepository<T>() where T : class
              {
                  return IUnitOfWork == null ? new TestBase<T>() : new TestBase<T>(IUnitOfWork);
              }
          }

      對于BLL層的祖宗,呵呵,BLLBas,它將數據上下文的創建工作在架造方法中注入,然后傳遞給LoadRepository這generic method,在BLL層的業務類中可以

      繼承它并為數據上下文進行實例化,再使用LoadRepository直接對數據表進行CURD操作,一切就是這樣簡單,看代碼:

               #region BLLBase中直接調用公用方法
                  IUnitOfWork.IsNotSubmit = true;
                  new OrderRepository(IUnitOfWork).Insert(order);
                  if (product != null)
                      LoadRepository<Product>().Insert(product);
                  IUnitOfWork.SaveChanges();
                #endregion

      OK,UI層直接調用BLL層的具體業務方法即可,下面我們再來看一個我DAL層的類結構,有時,我越得類結構圖比代碼更能說明問題:

      CURD操作規范:

      DAL層Repository模式實現:

      IUnitOfWork工作單元規范:

       回到目錄

      posted @ 2013-03-19 22:53  張占嶺  閱讀(2892)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久本道综合久久伊人| 亚洲精品国产综合麻豆久久99 | 午夜精品久久久久久| 非会员区试看120秒6次| 亚洲成人精品在线伊人网| 国产精品一区二区久久岳| 日本熟妇XXXX潮喷视频| 91亚洲国产成人久久精| 久久综合精品国产一区二区三区无| 国产在线观看91精品亚瑟 | 狠狠躁夜夜躁人人爽天天bl| 久久精品蜜芽亚洲国产AV| 亚洲午夜av一区二区| 强奷乱码中文字幕| 国产亚洲精品久久久久久久软件| 99国产精品国产精品久久| 自拍偷在线精品自拍偷99| 人人妻人人澡人人爽| 日本一区二区三区免费播放视频站| 日韩有码中文在线观看| 久人人爽人人爽人人片av| 久久精品人妻少妇一区二| 久久一日本道色综合久久| 成人自拍小视频免费观看| 亚洲成人av在线资源| 色午夜一av男人的天堂| 国产性三级高清在线观看| 西西人体44WWW高清大胆| 最新国产精品亚洲| 国产欧美综合在线观看第十页| 动漫AV纯肉无码AV电影网| 亚洲精品一区二区二三区| 人妻熟女av一区二区三区| 国产久免费热视频在线观看 | 无码人妻一区二区三区兔费| 国产精品成人观看视频国产奇米 | 国产亚洲精品在av| 国产欧美另类久久久精品不卡 | 国产羞羞的视频一区二区| 国产成人影院一区二区三区| 国产性一交一乱一伦一色一情 |