最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ABP引入SqlSugar框架的簡單版創(chuàng)建使用

 更新時間:2022年04月29日 14:38:21   作者:騙你學計算機  
這篇文章主要為大家介紹了ABP引入SqlSugar框架的簡單版創(chuàng)建使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

上一篇引入了Dapper框架,估計大家都會用了。但是很多都被封裝,想探究原理的小伙伴就很失望了。那么今天的SqlSugar就說說大概思路。簡單版和ABP的關聯(lián)比較少,未來我還會寫一期切合ABP框架的,小伙伴稍等下。

一 新建類庫

為了代碼清晰,我新建了一個類庫。引入了SqlSugar的框架包,2個倉儲類,1個DbContext

聲明實體

    [SugarTable("BasBloodLevel")]
    public class BasBloodLevel
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string Code { get; set; }
    }

二 基本倉儲

先實現(xiàn)基本倉儲IBaseRepository 與BaseRepository

    /// <summary>
    /// 基類接口,其他接口繼承該接口
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public interface IBaseRepository<TEntity> where TEntity : class
    {
        /// <summary>
        /// 根據ID查詢
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        Task<TEntity> QueryByID(object objId);
        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<bool> Add(TEntity model);
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<bool> Update(TEntity model);
        /// <summary>
        /// 刪除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<bool> DeleteByIds(object[] ids);
    }
    /// <summary>
    /// 基類實現(xiàn)
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    public class BaseRepository<TEntity> : DbContext<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
    {
        /// <summary>
        /// 寫入實體數據
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Add(TEntity model)
        {
            //這里需要注意的是,如果使用了Task.Run()就會導致 sql語句日志無法記錄改成下面的
            //var i = await Task.Run(() => Db.Insertable(model).ExecuteCommand());
            var i = await Db.Insertable(model).ExecuteCommandAsync();
            return i > 0;
        }
        /// <summary>
        /// 根據ID刪除
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        public async Task<bool> DeleteByIds(object[] ids)
        {
            var i = await Db.Deleteable<TEntity>().In(ids).ExecuteCommandAsync();
            return i > 0;
        }
        /// <summary>
        /// 根據ID查詢一條數據
        /// </summary>
        /// <param name="objId"></param>
        /// <returns></returns>
        public async Task<TEntity> QueryByID(object objId)
        {
            return await Db.Queryable<TEntity>().InSingleAsync(objId);
        }
        /// <summary>
        /// 更新實體數據
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public async Task<bool> Update(TEntity model)
        {
            //這種方式會以主鍵為條件
            var i = await Db.Updateable(model).ExecuteCommandAsync();
            return i > 0;
        }
    }

三 實現(xiàn)SqlSugar的DB

此處的ConnectionString 地址,我們可以直接讀取 ABP框架的配置文件,但是為了方便我直接寫死了

    public class DbContext<T> where T : class, new()
    {
        public DbContext()
    {
        Db = new SqlSugarClient(new ConnectionConfig()
        {
//數據庫地址我們可以直接讀取 ABP框架的配置文件,但是為了方便我直接寫死了
            ConnectionString = "Server=****; Database=****; Uid=sa; Pwd=****;MultipleActiveResultSets=true;",
            DbType = DbType.SqlServer,
            InitKeyType = InitKeyType.Attribute,//從特性讀取主鍵和自增列信息
            IsAutoCloseConnection = true,//開啟自動釋放模式
        });
        //調式代碼 用來打印SQL 
        Db.Aop.OnLogExecuting = (sql, pars) =>
        {
            Console.WriteLine(sql + "\r\n" +
                Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            Console.WriteLine();
        };
    }
    //注意:不能寫成靜態(tài)的
    public SqlSugarClient Db;//用來處理事務多表查詢和復雜的操作
    public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用來操作當前表的數據
    public SimpleClient<BasBloodLevel> BasBloodLevelDb { get { return new SimpleClient<BasBloodLevel>(Db); } }//用來處理User表的常用操作
}

四 實現(xiàn)依賴注入

這樣我們就能全局使用了

    [DependsOn(typeof(AbpZeroCoreModule))]
    public class Module : AbpModule
    {
        public override void Initialize()
        {
            IocManager.Register(typeof(IBaseRepository<>), typeof(BaseRepository<>), DependencyLifeStyle.Singleton);
            //依賴注入程序集 
            IocManager.RegisterAssemblyByConvention(typeof(Module).GetAssembly());
        }
    }

既然要實現(xiàn)依賴注入,那肯定要初始化這個類觸發(fā)注入了。我選擇在EF層里加,這樣可以不影響原有的EF層初始化

五 應用層使用

直接引用對應的IBaseRepository倉儲

    public class BasBloodBreedAppService : BloodTestLibSystemAppServiceBase,IApplicationService
    {
        private  IBaseRepository<BasBloodLevel> _baseRepository { get; set; }
        public BasBloodBreedAppService(IBaseRepository<BasBloodLevel> baseRepository) {
            _baseRepository = baseRepository;
        }
        public async Task<BasBloodLevel> GetBase() {
           var ce=await _baseRepository.QueryByID(1);
            return ce;
        }
    }

證明一下我是成功的

此刻引入SqlSugar就完成了。但是他確實了很ABP很多好用的操作。

下一篇繼續(xù)優(yōu)化,更多關于ABP引入SqlSugar框架的資料請關注腳本之家其它相關文章!

相關文章

  • 未處理的事件"PageIndexChanging" 之解決方案

    未處理的事件"PageIndexChanging" 之解決方案

    今天我寫一個小程序遇到這個問題,上網搜了一下,已經有很好的解決方法了,以前都是拉控件自己生成,現(xiàn)在用代碼自己寫就出現(xiàn)了這個問題
    2008-07-07
  • asp.net Repeater之非常好的數據分頁

    asp.net Repeater之非常好的數據分頁

    asp.net Repeater之非常好的數據分頁實現(xiàn)代碼。
    2009-07-07
  • ASP.NET Core依賴注入DI容器的方法實現(xiàn)

    ASP.NET Core依賴注入DI容器的方法實現(xiàn)

    本文主要介紹了ASP.NET Core依賴注入DI容器的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • GridView自定義刪除操作的具體方法

    GridView自定義刪除操作的具體方法

    今天,我們這里要說的就是在GridView里面如何新添加一行“刪除”列,如何刪除前彈出通知等操作,有需要的朋友可以參考一下
    2013-09-09
  • .NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析

    .NET醫(yī)院公眾號系統(tǒng)線程CPU雙高問題分析

    這篇文章主要介紹了.NET醫(yī)院公眾號系統(tǒng) 線程CPU雙高分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • AspNetCore中的中間件詳解

    AspNetCore中的中間件詳解

    ASP.NET Core處理請求的方式看做是一個管道,中間件是組裝到應用程序管道中用來處理請求和響應的組件,這篇文章主要介紹了AspNetCore中的中間件詳解,需要的朋友可以參考下
    2023-05-05
  • .net非托管資源的回收方法

    .net非托管資源的回收方法

    這篇文章主要介紹了.net非托管資源的回收方法,以實例形式詳細分析歸納了.net非托管資源的兩種回收方法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • 使用ASP.NET?Web?API構建Restful?API

    使用ASP.NET?Web?API構建Restful?API

    這篇文章介紹了使用ASP.NET?Web?API構建Restful?API的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • .net數據庫連接池配置技巧(默認值)

    .net數據庫連接池配置技巧(默認值)

    ado.net 本就有連接功能,所有.net開法基本不用去考慮連接問題,怪不得.net的連接池資料網上找不到。.net連接池只要在連接字符串里配制就可以了
    2008-12-12
  • 關于C# if語句中并列條件的執(zhí)行

    關于C# if語句中并列條件的執(zhí)行

    我們知道,當兩個條件進行邏輯與操作的時候,其中任何一個條件為假,則表達式的結果為假。所以,遇到(A 且 B)這種表達式,如果A為假的話,B是不是真假都無所謂了,當遇到一個假條件的時候,程序也就沒有必要去額外的判斷剩下的東西了
    2012-02-02

最新評論

西昌市| 察哈| 门源| 清苑县| 永修县| 灌云县| 嘉荫县| 寿宁县| 章丘市| 嘉兴市| 涟水县| 宁河县| 邮箱| 宾阳县| 扬中市| 且末县| 台南市| 疏附县| 潞西市| 勐海县| 临颍县| 霍林郭勒市| 台北市| 博爱县| 宁晋县| 双桥区| 莱州市| 龙门县| 隆尧县| 张家港市| 淳化县| 石林| 常宁市| 黄龙县| 澄城县| 儋州市| 台湾省| 汉阴县| 赣榆县| 丹凤县| 安阳市|