中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

EF架構~豁出去了,為了IOC,為了擴展,改變(bian)以(yi)前的IRepository接口

回到目錄

使用了4年的IRepository數據倉儲接口,今天要改變了,對于這個數據倉儲操作接口,它提倡的是簡潔,單純,就是對數據上下文的操作,而直正的數據上下文本身我們卻把它忽略了,在我的IRepository接口里根本沒有數據上下文對象,這是不完整的,也許你會說,我使用了基類,數據基類里有數據上下文,是的,我也是那樣用的,但有時,這種方法有些死板了,真的,當(dang)你碰到IOC時,這(zhe)種(zhong)方式的(de)短板就出來了(le),即,每個(ge)反射出來的(de)Repository對象都(dou)(dou)是(shi)獨立的(de),每個(ge)對象里的(de)上(shang)下文(wen)也都(dou)(dou)是(shi)獨立的(de),這(zhe)是(shi)重(zhong)點,由于上(shang)下文(wen)是(shi)獨立的(de),所以(yi),很多事我們都(dou)(dou)沒法干,這(zhe)包括<JOIN關聯查詢(xun),非MSDTC的(de)事務>,看了上面的這么多原因,所以,才決定,擴展我的IRepository接口,當然,嚴格說,這違背了面向對象的原則,接口不提倡擴展,只提倡新建,呵呵.

全新的IRepository接口

 /// <summary>
    /// 基礎的數據操(cao)作規范
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IRepository<TEntity>
           where TEntity : class
    {
        /// <summary>
        /// 設定數據上下文,它(ta)一(yi)般由構架方法(fa)注入
        /// </summary>
        /// <param name="unitOfWork"></param>
        void SetDbContext(IUnitOfWork unitOfWork);

        /// <summary>
        /// 添加實體并提(ti)交到(dao)數據服務器
        /// </summary>
        /// <param name="item">Item to add to repository</param>
        void Insert(TEntity item);

        /// <summary>
        /// 移除實體并(bing)提(ti)交到(dao)數據服務器
        /// 如果表存在約束,需要(yao)先(xian)刪除(chu)子表信息
        /// </summary>
        /// <param name="item">Item to delete</param>
        void Delete(TEntity item);

        /// <summary>
        /// 修(xiu)改實體并提交到數據服務(wu)器(qi)
        /// </summary>
        /// <param name="item"></param>
        void Update(TEntity item);

        /// <summary>
        /// 得(de)到指定的實體集(ji)(ji)合(延時結果集(ji)(ji))
        /// Get all elements of type {T} in repository
        /// </summary>
        /// <returns>List of selected elements</returns>
        IQueryable<TEntity> GetModel();

        /// <summary>
        /// 根據(ju)主鍵得(de)到實(shi)體(ti)
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        TEntity Find(params object[] id);
    }
View Code

在 DbContext數據基類中的實現

       public void SetDbContext(IUnitOfWork unitOfWork)
        {
            this.Db = (DbContext)unitOfWork;
            this.UnitWork = unitOfWork;
        }

 

在IOC中的使用

      IUnitOfWork db;
      IRepository<Question_Info> question_InfoRepository;
      public EFController()
        {
         
            //反射出倉儲對象
            db = ServiceLocator.Instance.GetService<IUnitOfWork>();
            question_InfoRepository = ServiceLocator.Instance.GetService<IRepository<Question_Info>>();
             //為倉(cang)儲對象設置上下文
            question_InfoRepository.SetDbContext(db);
}

在寫(xie)JOIN查詢時,它是(shi)被支持的,因(yin)為(wei)它的數(shu)據(ju)上下文(wen)是(shi)同一個

 

 

 回到目錄

posted @ 2014-05-08 15:55  張占嶺  閱讀(5036)  評論(3)    收藏  舉報