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

EF架構~EF異(yi)步改造之路~倉儲接口(kou)的改造

回到目錄

返回異步與并行目錄

C#5.0帶來了并行編程

{C#1.0托(tuo)管代碼→C#2.0泛型→C#3.0LINQ→C#4.0動態語言→C#5.0異步(bu)編程(cheng)}

隨著C#5.0在.net4.5出來之后,它們主推的(de)(de)(de)(de)并(bing)行(xing)(xing)技術(shu)也逐漸變得越來越熱,這種熱量(liang)已經傳到了我(wo)這里,身(shen)為倉(cang)儲大叔(shu)的(de)(de)(de)(de)我(wo),一定也對自己的(de)(de)(de)(de)倉(cang)儲進(jin)行(xing)(xing)并(bing)行(xing)(xing)化的(de)(de)(de)(de)改造,這是(shi)大勢所趨,呵呵,今天(tian)主要是(shi)把我(wo)的(de)(de)(de)(de)IRepository.Core項目(mu)進(jin)行(xing)(xing)擴展,即添加一些對應的(de)(de)(de)(de)并(bing)行(xing)(xing)接口,然后讓我(wo)的(de)(de)(de)(de)并(bing)行(xing)(xing)(異(yi)步(bu)(bu))倉(cang)儲去實現(xian)它,事實上,.net的(de)(de)(de)(de)ef這塊,實現(xian)異(yi)步(bu)(bu)(并(bing)行(xing)(xing))非常容(rong)易(yi),在C#5.0里由于async/await關(guan)鍵字的(de)(de)(de)(de)出現(xian),這使得實現(xian)異(yi)步(bu)(bu)變得更加容(rong)易(yi)了,呵呵,還(huan)是(shi)那句話,身(shen)為.net領域的(de)(de)(de)(de)程序編(bian)寫者,我(wo)感到萬(wan)心幸福!

IRepository變成了IRepositoryAsync

    /// <summary>
    /// 異步(bu)操作
    /// 基礎的數據(ju)操作規范(fan)
    /// 與ORM架構無關(guan)
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IRepositoryAsync<TEntity>
           where TEntity : class
    {
        /// <summary>
        /// 設定(ding)數據上(shang)下文,它一般由構架方法(fa)注入(ru)
        /// </summary>
        /// <param name="unitOfWork"></param>
        void SetDbContext(IUnitOfWork unitOfWork);

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

        /// <summary>
        /// 移(yi)除實體并(bing)提交(jiao)到數(shu)據服務器(qi)
        /// 如果表存在約束,需要先刪除子表信息(xi)
        /// </summary>
        /// <param name="item">Item to delete</param>
        Task Delete(TEntity item);

        /// <summary>
        /// 修改實體并提交(jiao)到數據服(fu)務器
        /// </summary>
        /// <param name="item"></param>
        Task Update(TEntity item);

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

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

IExtensionRepository變成了IExtensionRepositoryAsync

    /// <summary>
    /// 異(yi)步操作(zuo)
    /// 擴展(zhan)的Repository操作規(gui)范(fan)
    /// </summary>
    public interface IExtensionRepositoryAsync<TEntity> :
        IRepositoryAsync<TEntity>,
        IOrderableRepository<TEntity>
        where TEntity : class
    {
        /// <summary>
        /// 添加(jia)集(ji)合(he)(he)[集(ji)合(he)(he)數目不(bu)大時用(yong)此方法,超大集(ji)合(he)(he)使用(yong)BulkInsert]
        /// </summary>
        /// <param name="item"></param>
        Task Insert(IEnumerable<TEntity> item);

        /// <summary>
        /// 修改集(ji)(ji)合(he)[集(ji)(ji)合(he)數目不大時用(yong)此方法,超大集(ji)(ji)合(he)使用(yong)BulkUpdate]
        /// </summary>
        /// <param name="item"></param>
        Task Update(IEnumerable<TEntity> item);

        /// <summary>
        /// 刪(shan)除集(ji)合(he)[集(ji)合(he)數目不大(da)時用此方法,超大(da)集(ji)合(he)使用批量刪(shan)除]
        /// </summary>
        /// <param name="item"></param>
        Task Delete(IEnumerable<TEntity> item);

        /// <summary>
        /// 根(gen)據指定lambda表達式,得到延時結(jie)果集
        /// </summary>
        /// <param name="predicate"></param>
        /// <returns></returns>
        IQueryable<TEntity> GetModel(Expression<Func<TEntity, bool>> predicate);

        /// <summary>
        /// 根(gen)據指定lambda表達式,得到第一個實體
        /// </summary>
        /// <param name="predicate"></param>
        /// <returns></returns>
        TEntity Find(Expression<Func<TEntity, bool>> predicate);

        /// <summary>
        /// 批量添(tian)加,添(tian)加之前可以去(qu)除(chu)自增屬性,默(mo)認不去(qu)除(chu)
        /// </summary>
        /// <param name="item"></param>
        /// <param name="isRemoveIdentity"></param>
        Task BulkInsert(IEnumerable<TEntity> item, bool isRemoveIdentity);

        /// <summary>
        /// 批量添加(jia)
        /// </summary>
        /// <param name="item"></param>
        Task BulkInsert(IEnumerable<TEntity> item);

        /// <summary>
        /// 批量更新
        /// </summary>
        /// <param name="item"></param>
        Task BulkUpdate(IEnumerable<TEntity> item, params string[] fieldParams);

        /// <summary>
        /// 批量刪除(chu)
        /// </summary>
        /// <param name="item"></param>
        Task BulkDelete(IEnumerable<TEntity> item);

        /// <summary>
        /// 保存之后
        /// </summary>
        event Action<SavedEventArgs> AfterSaved;
        /// <summary>
        /// 保(bao)存之前
        /// </summary>
        event Action<SavedEventArgs> BeforeSaved;

    }

ISpecificationRepository變成了ISpecificationRepositoryAsync

    /// <summary>
    /// EF底層構(gou)架(jia),關于(yu)規(gui)約功能的倉儲(chu)接口
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface ISpecificationRepositoryAsync<TEntity> :
        IExtensionRepositoryAsync<TEntity>
        where TEntity : class
    {
        /// <summary>
        /// 根據指定規約,得到(dao)延時結果(guo)集(ji)
        /// </summary>
        /// <param name="specification"></param>
        /// <returns></returns>
        IQueryable<TEntity> GetModel(ISpecification<TEntity> specification);

        /// <summary>
        /// 根據(ju)指定(ding)規約,得(de)到第一個實體(ti)
        /// </summary>
        /// <param name="specification"></param>
        /// <returns></returns>
        TEntity Find(ISpecification<TEntity> specification);

        /// <summary>
        /// 帶(dai)排序功能(neng)的,根據指定規約,得到結果集(ji)
        /// </summary>
        /// <param name="orderBy"></param>
        /// <param name="specification"></param>
        /// <returns></returns>
        IQueryable<TEntity> GetModel(Action<IOrderable<TEntity>> orderBy, ISpecification<TEntity> specification);

    }

大(da)家(jia)可以(yi)看到,倉儲大(da)叔的(de)(de)異(yi)步(bu)(bu)操作接(jie)口(kou)都是以(yi)Async結尾的(de)(de),這也是遵從了(le)微軟的(de)(de)規范(fan)的(de)(de),例如同步(bu)(bu)的(de)(de)ToList()方法在改成異(yi)步(bu)(bu)后(hou)變成了(le)ToListAsync(),而占(zhan)占(zhan)并沒(mei)有(you)在原(yuan)有(you)接(jie)口(kou)上進行修改,而是擴展了(le)異(yi)步(bu)(bu)接(jie)口(kou),方法名(ming)稱并沒(mei)有(you)變,感覺這樣對程序開發(fa)者

來說更友好,更能接(jie)受,即我們的CUD操作還是(Insert,Update,Delete),只(zhi)是在(zai)接(jie)口上(shang)進行區(qu)分,你用IRepository接(jie)口來聲明實(shi)例,生成(cheng)的就(jiu)是同步操作,而使(shi)用IRepositoryAsync聲明的實(shi)例,就(jiu)是以異步的方(fang)式(shi)實(shi)現(xian)操作。

回到目錄

返回異步與并行目錄

posted @ 2014-12-04 10:28  張占嶺  閱讀(8289)  評論(1)    收藏  舉報