ABP引入SqlSugar框架的簡(jiǎn)單版創(chuàng)建使用
上一篇引入了Dapper框架,估計(jì)大家都會(huì)用了。但是很多都被封裝,想探究原理的小伙伴就很失望了。那么今天的SqlSugar就說(shuō)說(shuō)大概思路。簡(jiǎn)單版和ABP的關(guān)聯(lián)比較少,未來(lái)我還會(huì)寫(xiě)一期切合ABP框架的,小伙伴稍等下。
一 新建類(lèi)庫(kù)
為了代碼清晰,我新建了一個(gè)類(lèi)庫(kù)。引入了SqlSugar的框架包,2個(gè)倉(cāng)儲(chǔ)類(lèi),1個(gè)DbContext

聲明實(shí)體
[SugarTable("BasBloodLevel")]
public class BasBloodLevel
{
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
public string Code { get; set; }
}二 基本倉(cāng)儲(chǔ)
先實(shí)現(xiàn)基本倉(cāng)儲(chǔ)IBaseRepository 與BaseRepository
/// <summary>
/// 基類(lèi)接口,其他接口繼承該接口
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public interface IBaseRepository<TEntity> where TEntity : class
{
/// <summary>
/// 根據(jù)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>
/// 基類(lèi)實(shí)現(xiàn)
/// </summary>
/// <typeparam name="TEntity"></typeparam>
public class BaseRepository<TEntity> : DbContext<TEntity>, IBaseRepository<TEntity> where TEntity : class, new()
{
/// <summary>
/// 寫(xiě)入實(shí)體數(shù)據(jù)
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public async Task<bool> Add(TEntity model)
{
//這里需要注意的是,如果使用了Task.Run()就會(huì)導(dǎo)致 sql語(yǔ)句日志無(wú)法記錄改成下面的
//var i = await Task.Run(() => Db.Insertable(model).ExecuteCommand());
var i = await Db.Insertable(model).ExecuteCommandAsync();
return i > 0;
}
/// <summary>
/// 根據(jù)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>
/// 根據(jù)ID查詢一條數(shù)據(jù)
/// </summary>
/// <param name="objId"></param>
/// <returns></returns>
public async Task<TEntity> QueryByID(object objId)
{
return await Db.Queryable<TEntity>().InSingleAsync(objId);
}
/// <summary>
/// 更新實(shí)體數(shù)據(jù)
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public async Task<bool> Update(TEntity model)
{
//這種方式會(huì)以主鍵為條件
var i = await Db.Updateable(model).ExecuteCommandAsync();
return i > 0;
}
}三 實(shí)現(xiàn)SqlSugar的DB
此處的ConnectionString 地址,我們可以直接讀取 ABP框架的配置文件,但是為了方便我直接寫(xiě)死了
public class DbContext<T> where T : class, new()
{
public DbContext()
{
Db = new SqlSugarClient(new ConnectionConfig()
{
//數(shù)據(jù)庫(kù)地址我們可以直接讀取 ABP框架的配置文件,但是為了方便我直接寫(xiě)死了
ConnectionString = "Server=****; Database=****; Uid=sa; Pwd=****;MultipleActiveResultSets=true;",
DbType = DbType.SqlServer,
InitKeyType = InitKeyType.Attribute,//從特性讀取主鍵和自增列信息
IsAutoCloseConnection = true,//開(kāi)啟自動(dòng)釋放模式
});
//調(diào)式代碼 用來(lái)打印SQL
Db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql + "\r\n" +
Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
Console.WriteLine();
};
}
//注意:不能寫(xiě)成靜態(tài)的
public SqlSugarClient Db;//用來(lái)處理事務(wù)多表查詢和復(fù)雜的操作
public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用來(lái)操作當(dāng)前表的數(shù)據(jù)
public SimpleClient<BasBloodLevel> BasBloodLevelDb { get { return new SimpleClient<BasBloodLevel>(Db); } }//用來(lái)處理User表的常用操作
}四 實(shí)現(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());
}
}既然要實(shí)現(xiàn)依賴注入,那肯定要初始化這個(gè)類(lèi)觸發(fā)注入了。我選擇在EF層里加,這樣可以不影響原有的EF層初始化

五 應(yīng)用層使用
直接引用對(duì)應(yīng)的IBaseRepository倉(cāng)儲(chǔ)
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就完成了。但是他確實(shí)了很ABP很多好用的操作。
下一篇繼續(xù)優(yōu)化,更多關(guān)于ABP引入SqlSugar框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
未處理的事件"PageIndexChanging" 之解決方案
今天我寫(xiě)一個(gè)小程序遇到這個(gè)問(wèn)題,上網(wǎng)搜了一下,已經(jīng)有很好的解決方法了,以前都是拉控件自己生成,現(xiàn)在用代碼自己寫(xiě)就出現(xiàn)了這個(gè)問(wèn)題2008-07-07
asp.net Repeater之非常好的數(shù)據(jù)分頁(yè)
asp.net Repeater之非常好的數(shù)據(jù)分頁(yè)實(shí)現(xiàn)代碼。2009-07-07
ASP.NET Core依賴注入DI容器的方法實(shí)現(xiàn)
本文主要介紹了ASP.NET Core依賴注入DI容器的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
.NET醫(yī)院公眾號(hào)系統(tǒng)線程CPU雙高問(wèn)題分析
這篇文章主要介紹了.NET醫(yī)院公眾號(hào)系統(tǒng) 線程CPU雙高分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
使用ASP.NET?Web?API構(gòu)建Restful?API
這篇文章介紹了使用ASP.NET?Web?API構(gòu)建Restful?API的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
.net數(shù)據(jù)庫(kù)連接池配置技巧(默認(rèn)值)
ado.net 本就有連接功能,所有.net開(kāi)法基本不用去考慮連接問(wèn)題,怪不得.net的連接池資料網(wǎng)上找不到。.net連接池只要在連接字符串里配制就可以了2008-12-12
關(guān)于C# if語(yǔ)句中并列條件的執(zhí)行
我們知道,當(dāng)兩個(gè)條件進(jìn)行邏輯與操作的時(shí)候,其中任何一個(gè)條件為假,則表達(dá)式的結(jié)果為假。所以,遇到(A 且 B)這種表達(dá)式,如果A為假的話,B是不是真假都無(wú)所謂了,當(dāng)遇到一個(gè)假條件的時(shí)候,程序也就沒(méi)有必要去額外的判斷剩下的東西了2012-02-02

