一、引言
做.Net這麼多年,出現了很多很多ORM框架,比如Dapper,Sqlsugar,Freesql等等。在之前的專案中,用到的ORM框架也大多數是這幾個老牌的框架。
不過最近園子關於.NET ORM HiSql的討論挺多的,本系列將通過不斷學習 HiSql官網教學,嘗試將之前使用SqlSuger ORM的一個專案,使用HiSql框架實現相關功能,看看hisql能帶給我們哪些驚喜。
c# 國內外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver資料常規插入測試效能對比對比
HiSql GitGub地址
HiSql官網教學
專案介紹:專案是一個通用的後臺管理系統,包含選單管理、許可權管理、組織架構、使用者管理等等。
資料庫採用SqlServer 2016;前端使用Element-UI;後端採用.Net5 Web Api。
二、整合HiSql到專案
2、在專案中新建類檔案 HiSqlSetupExtension.cs, 用於注入資料庫設定,hisql資料庫存取物件。
using HiSql;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace H.CRM.Action.API.Helper
{
public static class HiSqlSetupExtension
{
public static IServiceCollection AddHiSqlSetup(this IServiceCollection services)
{
//注入HiSqlConfig
services.AddTransient<HiSqlConfig>();
//注入HiSqlClient
services.AddTransient<HiSqlClient>((d) =>
{
var config = d.GetService<HiSqlConfig>();
var hisql = new HiSqlClient(config);
return hisql;
});
return services;
}
}
class HiSqlConfig : ConnectionConfig
{
static readonly NLog.Logger logger = NLog.LogManager.GetLogger("HiSqlSetup");
public HiSqlConfig(IConfiguration configuration)
{
DbType = DBType.SqlServer;
DbServer = "HISQL";
ConnectionString = configuration.GetSection("ConnectionStrings:Admin").Value;
Schema = "dbo";
SqlExecTimeOut = 1000 * 5;
AppEvents = new AopEvent()
{
OnDbDecryptEvent = (connstr) =>
{
//解密連線欄位
return connstr;
},
OnLogSqlExecuting = (sql, param) =>
{
//sql執行前 紀錄檔記錄 (非同步)
#if DEBUG
logger.Trace($"執行前sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
#endif
},
OnLogSqlExecuted = (sql, param) =>
{
#if DEBUG
//sql執行後 紀錄檔記錄 (非同步)
logger.Trace($"執行後sql:{sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
#endif
},
OnSqlError = (sqlEx) =>
{
//sql執行錯誤後 紀錄檔記錄 (非同步)
logger.Error($"執行錯誤:{sqlEx.Message} sql:{sqlEx.Sql} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
},
OnTimeOut = (int timer) =>
{
//logger.Trace($"執行超時:{timer} time:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ffff")}");
}
};
}
}
}
3、在 Startup 中的ConfigureServices方法中,新增 hisql的使用。
//注入Hisql相關
services.AddHiSqlSetup();
4、新建 控制器 HiSqlController,新增初始化方法。
using Microsoft.AspNetCore.Mvc;
using HiSql;
using System.Linq;
namespace HSMB.Admin.WebApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class HiSqlController : ControllerBase
{
private readonly HiSqlClient sqlClient;
public HiSqlController(
HiSqlClient hiSqlClient
)
{
this.sqlClient = hiSqlClient;
}
[HttpGet, HttpPost]
public IActionResult Install()
{
sqlClient.CodeFirst.InstallHisql();
var tables = sqlClient.DbFirst.GetTables().ToList().Where(t=>t.TabName.StartsWith("H"));
return new JsonResult(tables);
}
}
}
5、啟動專案後,存取 專案地址 http://localhost:8868/api/hisql/Install 初始化hisql。
如圖表示初始化成功,同時在資料庫也可以看到,系統建立了下圖的4個基礎表:
1.Hi_TabModel #表結構資訊主表
2.Hi_FieldModel #表結構資訊明細表
3.Hi_Domain #資料域
4.Hi_DataElement #資料元素
到此,專案就完成了HiSql的引入了,後面就可以愉快的使用HiSql各個功能。