sqlsugar已經在第一時間完美兼容.NET5而且已經有人在使用了, 不少人都擔憂用了開源框架遇到問題沒法解決,致使前功盡棄,使用SqlSugar你大可放心,除了有詳細文檔和幾年的大量用戶積累,git
SqlSugar還提供了完整的服務,讓您的項目沒有後顧之憂github
優勢: 簡單易用、功能齊全、高性能、輕量級、服務齊全sql
支持數據庫:MySql、SqlServer、Sqlite、Oracle 、 postgresql、達夢、人大金倉數據庫
免費服務json
一、基本用法諮詢緩存
二、BUG提交安全
三、採納建議和需求app
四、代碼開源 可用於任何商用項目 不收取費用 下載框架
五、qq交流羣討論 995692596(空閒) 654015377(1800/2000 擁擠) 726648662((已滿) 225982985 (已滿)post
經過該功能咱們能輕鬆的監控到執行超過1秒的sql,而且能夠拿 到他的 C#代碼文件和行數 和方法
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { DbType = DbType.SqlServer, ConnectionString = Config.ConnectionString, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true }); db.Aop.OnLogExecuted = (sql, p) => { //執行時間超過1秒 if (db.Ado.SqlExecutionTime.TotalSeconds > 1) {
//代碼CS文件名 var fileName= db.Ado.SqlStackTrace.FirstFileName; //代碼行數 var fileLine = db.Ado.SqlStackTrace.FirstLine; //方法名 var FirstMethodName = db.Ado.SqlStackTrace.FirstMethodName;
//sql
var exesql=sql;
//參數
var sqlpars=p; //db.Ado.SqlStackTrace.MyStackTraceList[1].xxx 獲取上層方法的信息 } };
當咱們的代碼刪了哪具體的代碼,添加了具體的代碼,修改了哪一個列若是沒有強大的日誌功能將你將沒法找回,SqlSugar能夠輕鬆實現高安全級別的數據日誌
db.Aop.OnDiffLogEvent = it => { var editBeforeData = it.BeforeData;//操做前記錄 包含: 字段描述 列名 值 表名 表描述 var editAfterData = it.AfterData;//操做後記錄 包含: 字段描述 列名 值 表名 表描述 var sql = it.Sql; var parameter = it.Parameters; var data = it.BusinessData;//這邊會顯示你傳進來的對象 var time = it.Time; var diffType=it.DiffType;//enum insert 、update and delete //Write logic }; //添加 db.Insertable(new Student() { Name = "beforeName" }) .EnableDiffLogEvent(new { title="我是插入"}) //啓用日誌並添加業務對象 .ExecuteReturnIdentity();
//修改 db.Updateable<Student>(new Student() { Id = id, CreateTime = DateTime.Now, Name = "afterName", SchoolId = 2 }) .EnableDiffLogEvent() //啓動日誌 .ExecuteCommand();
//刪除 db.Deleteable<Student>(id) .EnableDiffLogEvent()//啓動日誌 .ExecuteCommand();
SqlSugar不但支持PgSql的Json array類型外,哪怕你的數據庫沒有JSON類型同樣可使用JSON對象進行存儲
ublic class UnitJsonTest { [SqlSugar.SugarColumn(IsPrimaryKey = true, IsIdentity = true)] public int Id { get; set; } [SqlSugar.SugarColumn(ColumnDataType ="varchar(max)", IsJson = true)] public Order Order { get; set; } public string Name{get;set;} } Db.Insertable(new UnitJsonTest() { Name="json1",Order = new Order { Id = 1, Name = "order1" } }).ExecuteCommand(); var list = Db.Queryable<UnitJsonTest>().ToList();
一、動態建立數據庫
下面代碼將會建立db1和db2數據庫
string conn = "server=.;uid=sa;pwd=haosql;database={0}"; var db = new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = string.Format(conn, "db1"), InitKeyType=InitKeyType.Attribute }); db.DbMaintenance.CreateDatabase(); var db2 = new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = string.Format(conn, "db2") }); db2.DbMaintenance.CreateDatabase();
二、動態建表
下面代碼將生成生Order1和Order2 兩張表 //注意db必須是同一個上下文 var db = new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, ConnectionString = ".;xxx", InitKeyType=InitKeyType.Attribute //這個屬性必須這麼設置 }); db.MappingTables.Add(typeof(Order).Name, typeof(Order).Name + 1); db.CodeFirst.InitTables(typeof(Order)); db.MappingTables.Add(typeof(Order).Name, typeof(Order).Name + 2); db.CodeFirst.InitTables(typeof(Order));
三、實體增、刪、查、改
var list= db.Queryable<Order>().AS("Order1").ToList();//查詢Order1的表 //增 刪 改用法和查詢同樣 Inasertable().AS Deleteable().AS Updateable().As
四、跨庫聯表查詢
var list = db.Queryable<Order, OrderItem, Custom>((o, i, c) => o.Id == i.OrderId&&c.Id == o.CustomId) .AS("xx.order") .AS<OrderItem>("yy.OrderItem") .AS<Custom>("zz.Custom") .Select<ViewOrder>() .ToList();
五、多切換
SqlSugarClient db = new SqlSugarClient(new List<ConnectionConfig>() { new ConnectionConfig(){ ConfigId="1", DbType=DbType.SqlServer, ConnectionString=Config.ConnectionString,InitKeyType=InitKeyType.Attribute,IsAutoCloseConnection=true }, new ConnectionConfig(){ ConfigId="2", DbType=DbType.MySql, ConnectionString=Config.ConnectionString4 ,InitKeyType=InitKeyType.Attribute ,IsAutoCloseConnection=true} }); //庫1 try { db.BeginTran(); db.Deleteable<Order>().ExecuteCommand(); db.ChangeDatabase("2");//使用庫2 db.Deleteable<Order>().ExecuteCommand(); db.CommitTran(); } catch { db.RollbackTran(); }
使用sqlsugar只須要配置主鍵,不須要實體配置任何外鍵關係就能實現級聯插入
//有自動賦值的外鍵 db.Insertable(new Order() { Name = "訂單 1", CustomId = 1, Price = 100, CreateTime = DateTime.Now, Id = 0,//自增列 Items = new List<OrderItem>() { new OrderItem(){ CreateTime=DateTime.Now, OrderId=0,//須要自動獲取訂單的自增列 Price=1, ItemId=1 } } }) .AddSubList(it => it.Items.First().OrderId )//設置item表的OrderId等於訂單自增列 .ExecuteReturnPrimaryKey();
當咱們用到Redis等操做時,更新數據時須要及時去清理緩存會變的很是複雜,SqlSugar支持多表緩存,而且更新其中一張表而且可以清除緩存
二緩緩存是將結果集進行緩存,當SQL和參數沒發生變化的時候從緩存裏面讀取數據,減小數據庫的讀寫操做
ICacheService myCache = new HttpRuntimeCache(); SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = Config.ConnectionString, DbType = DbType.SqlServer, IsAutoCloseConnection = true, ConfigureExternalServices = new ConfigureExternalServices() { DataInfoCacheService = myCache //配置咱們建立的緩存類 } }); db.Queryable<Student>().Where(it => it.Id > 0).WithCache().ToList();//設置緩存默認一天 db.Queryable<Student>().WithCache(1000).ToList();//設置具體過時時間
刪除數據同時更新緩存,插入用和更新也同樣的用法
db.Deleteable<Student>().RemoveDataCache().Where(it => it.Id == 1).ExecuteCommand(); //remove全部引用Student表的緩存,包含多表查詢
名稱 | 備註 | 返回類型 |
---|---|---|
GetDataBaseList | 獲取全部數據庫名稱 | List |
GetViewInfoList | 獲取全部視圖 | List |
GetTableInfoList | 獲取全部表 | List |
GetColumnInfosByTableName | 獲取列根據表名 | List |
GetIsIdentities | 獲取自增列 | List |
GetPrimaries | 獲取主鍵 | List |
IsAnyTable | 表是否存在 | bool |
IsAnyColumn | 列是否存在 | bool |
IsPrimaryKey | 主鍵是否存在 | bool |
IsIdentity | 自增是否存在 | bool |
IsAnyConstraint | 約束是否存在 | bool |
DropTable | 刪除表 | bool |
TruncateTable | 清空表 | bool |
CreateTable | 建立列(不建議使用,用CodeFirst建表) | bool |
AddColumn | 添加列 | bool |
UpdateColumn | 更新列 | bool |
AddPrimaryKey | 添加主鍵 | bool |
DropConstraint | 刪除約束 | bool |
BackupDataBase | 備份庫 | bool |
DropColumn | 刪除列 | bool |
RenameColumn | 重命名列 | bool |
AddTableRemark | 添加表描述 | bool |
AddColumnRemark | 添加列描述 | bool |
DeleteColumnRemark | 刪除列描述 | bool |
RenameTable | 重命名錶 | bool |
var orderField = "order';drop table order"; var orderInfo= db.EntityMaintenance.GetEntityInfo<Order>(); if (orderInfo.Columns.Any(it => it.DbColumnName != orderField)) { throw new Exception("請不要非法注入"); } db.Queryable<Order>().OrderBy(orderField).ToList();
SqlSugar一直在努力的變的更好,全部功能都是來自客戶而且經受過長期的用戶實踐,爲了可以給我更多動力
原碼下載: https://github.com/sunkaixuan/SqlSugar 只需你點贊,讓我動力十足