.net數(shù)據(jù)庫操作框架SqlSugar的簡單入門
介紹
SqlSugar是一款 老牌 .NET數(shù)據(jù)庫操作框架,由果糖大數(shù)據(jù)科技團隊維護和更新 ,Github star數(shù)僅次于EF 和 Dapper
優(yōu)點: 簡單易用、功能齊全、高性能、輕量級、服務(wù)齊全、有專業(yè)技術(shù)支持一天18小時服務(wù)
支持數(shù)據(jù)庫:MySql、SqlServer、Sqlite、Oracle 、 postgresql、達夢、人大金倉
框架新功能
最新穩(wěn)定版本5.0.2.8 ,發(fā)布后1個月時間NUGET下載量達到5000的版本,用戶使用也相當(dāng)滿意
而在穩(wěn)定版本的基礎(chǔ)上又布了5.0.2.9版本
加入3大新功能
1. 配置查詢
解決了大量字典表和簡單就為取一個name 就要寫聯(lián)表的問題,讓單表查詢解決一切
2.多租戶+倉儲+自動分配
3.行轉(zhuǎn)列
1、配置查詢
解決了大量字典表和簡單就為取一個name 就要寫聯(lián)表的問題,讓單表查詢解決一切
字典表我相信大家都全用到,他們可以方便的存儲性別、學(xué)歷、崗位等 一串?dāng)?shù)據(jù) 并進行TypeId進行區(qū)分
1.1 創(chuàng)建測試數(shù)據(jù)
創(chuàng)建一個字典實體
public class DataDictionary
{
public string Code { get; set; }
public string Name { get; set; }
public string Type { get; set; }
}
創(chuàng)建字典表并向里面插入測試數(shù)據(jù)
var db = GetInstance();
List<DataDictionary> datas = new List<DataDictionary>();
datas.Add(new DataDictionary() { Code="1", Name="男",Type="sex" });
datas.Add(new DataDictionary() { Code = "2", Name = "女", Type = "sex" });
datas.Add(new DataDictionary() { Code = "1", Name = "南通市", Type = "city" });
datas.Add(new DataDictionary() { Code = "2", Name = "蘇州市", Type = "city" });
datas.Add(new DataDictionary() { Code = "1", Name = "江蘇省", Type = "province" });
datas.Add(new DataDictionary() { Code = "2", Name = "湖南省", Type = "province" });
db.CodeFirst.InitTables<DataDictionary>();//這樣就能根據(jù)實體建表了
db.Insertable(datas).ExecuteCommand();//這樣就能把數(shù)據(jù)插進數(shù)據(jù)庫了<br>
在建一個Person表
public class Person
{
//數(shù)據(jù)庫字段
[SqlSugar.SugarColumn(IsPrimaryKey =true,IsIdentity =true)]
public int Id { get; set; }
public string Name { get; set; }
public int SexId { get; set; }
public int CityId { get; set; }
public int ProvinceId { get; set; }
//非數(shù)據(jù)庫字段
[SqlSugar.SugarColumn(IsIgnore =true)]
public string SexName { get; set; }
[SqlSugar.SugarColumn(IsIgnore = true)]
public string CityName { get; set; }
[SqlSugar.SugarColumn(IsIgnore = true)]
public string ProviceName { get; set; }
}
1.2 傳統(tǒng)字典聯(lián)表實現(xiàn)缺點
如果我們要將Person中的非數(shù)據(jù)字典查詢出來那么我們就需要寫有2種實現(xiàn)方式
1.連表或者子查詢 (缺點 寫起來很浪費時間)
2.將字典存到內(nèi)存,通過內(nèi)存賦值 (缺點 字典表超過1000條以上性能很差 ,并且不能排序,或者LIKE)
下面介紹通過SqlSugar的配置查詢解決上2面?zhèn)€難題
1.3 配置表簡化字典聯(lián)表
配置字典表
if (!db.ConfigQuery.Any())
{
var types= db.Queryable<DataDictionary>().Select(it => it.Type).Distinct().ToList();
foreach (var type in types)
{
db.ConfigQuery.SetTable<DataDictionary>(it => it.Code, it => it.Name, type, it => it.Type == type);
}
//如果其中Code都是唯一值可以按 1.4中的用法使用循環(huán)都不要
}
配置完我們查詢就會很方便了
var res=db.Queryable<Person>().Select(it => new Person()
{
Id=it.Id.SelectAll(),
SexName=it.SexId.GetConfigValue<DataDictionary>("sex"),
ProvinceName = it.ProvinceId.GetConfigValue<DataDictionary>("province"),
CityName = it.CityId.GetConfigValue<DataDictionary>("city"),
}).ToList();
//也支持支持寫在Where或者Orderby
1.4 簡單聯(lián)表查詢也可以配置
db.ConfigQuery.SetTable<Order>(it => it.Id, it => it.Name);//配置Order<br>
var list3 = db.Queryable<OrderItem>().Select(it => new OrderItem
{
ItemId = it.ItemId.SelectAll(),
OrderName = it.OrderId.GetConfigValue<Order>() //查詢的時候直接用
}).ToList();
總結(jié):配置表查詢的方式可以大大降低重復(fù)聯(lián)表問題,并且配置好后基本就不要寫JOIN了
2、多租戶+倉儲+自動分配
SqlSugar多租戶是通過ConfigId進行識別連接哪個庫,新版本添加了實體配置ConfigId
[TenantAttribute("1")]
public class C1Table
{
public string Id { get; set; }
}
[TenantAttribute("2")]
public class C2Table
{
public string Id { get; set; }
}
下面我們倉儲就可以通過實體配置自動識別是連接哪個庫
public class Repository<T> : SimpleClient<T> where T : class, new()
{
public Repository(ISqlSugarClient context = null) : base(context)//注意這里要有默認值等于null
{
if (context == null)
{
var db = new SqlSugarClient(new List<ConnectionConfig> {
new ConnectionConfig()
{
ConfigId="1",
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true,
ConnectionString = Config.ConnectionString
},
new ConnectionConfig()
{
ConfigId="2",
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true,
ConnectionString = Config.ConnectionString2
}
});
base.Context = db;
var configId = typeof(T).GetCustomAttribute<TenantAttribute>().configId;
db.ChangeDatabase(configId);
}
}
/// <summary>
/// 擴展方法,自帶方法不能滿足的時候可以添加新方法
/// </summary>
/// <returns></returns>
public List<T> CommQuery(string sql)
{
//base.Context.Queryable<T>().ToList();可以拿到SqlSugarClient 做復(fù)雜操作
return base.Context.Queryable<T>().Where(sql).ToList();
}
}
新版本還添加了切換倉儲功能
public class C1Service : Repository<C1Table>
{
public void Test()
{
base.AsTenant().BeginTran();
base.GetList(); //調(diào)用內(nèi)部倉儲方法
base.ChangeRepository<Repository<C2Table>>().GetList();//調(diào)用外部倉儲
base.AsTenant().CommitTran();
}
}
3、行列互轉(zhuǎn)功能
第一個參數(shù) 列名、第二個參數(shù) 頭行名、第三個參數(shù) 值
var test06 = db.Queryable<Order>() .ToPivotTable(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Datatable var test07 = db.Queryable<Order>() .ToPivotList(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回List<dynamic><br> var test08 = db.Queryable<Order>() .ToPivotJson(it => it.Id, it => it.Name, it => it.Sum(x => x.Price));//返回Json
官網(wǎng)地址: https://www.donet5.com/Home/Doc
以上就是.net數(shù)據(jù)庫操作框架SqlSugar的簡單入門的詳細內(nèi)容,更多關(guān)于.net數(shù)據(jù)庫操作框架SqlSugar的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ASP.NET(C#)中操作SQLite數(shù)據(jù)庫實例
最近項目中有使用到SQLite數(shù)據(jù)庫,于是查找資料,編寫了一個ASP.NET基于C#語言的SQLite數(shù)據(jù)庫操作實例.大家看代碼就可以看懂了,和以往使用ADO.NET操作SQL數(shù)據(jù)庫類似.2009-12-12
.Net使用RabbitMQ實現(xiàn)短信密碼重置的操作步驟
在C#開發(fā)中,通過RabbitMQ實現(xiàn)短信服務(wù)可增強應(yīng)用的消息通知能力,本文介紹了使用RabbitMQ發(fā)送短信的步驟,包括安裝RabbitMQ客戶端庫、創(chuàng)建連接和通道、實現(xiàn)短信發(fā)送服務(wù)、配置RabbitMQ消費者,并集成到用戶密碼重置流程中,通過示例代碼,可以快速理解整個實現(xiàn)過程2024-09-09
ASP.NET小結(jié)之MVC, MVP, MVVM比較以及區(qū)別(一)
MVC, MVP和MVVM都是用來解決界面呈現(xiàn)和邏輯代碼分離而出現(xiàn)的模式。以前只是對它們有部分的了解,沒有深入的研究過,對于一些里面的概念和區(qū)別也是一知半解?,F(xiàn)在一邊查資料,并結(jié)合自己的理解,來談一下對于這三種模式思想的理解,以及它們的區(qū)別。歡迎各位高手拍磚。2014-05-05
Asp.net之TextBox只允許輸入數(shù)字的方法總結(jié)
Asp.net之TextBox只允許輸入數(shù)字的方法總結(jié),需要的朋友可以參考一下2013-02-02
.Net Core學(xué)習(xí)教程之在Mvc中簡單的使用日志組件
這篇文章主要給大家介紹了關(guān)于.Net Core學(xué)習(xí)教程之在Mvc中簡單使用日志組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06

