寫到這裡,各位看官且聽我說兩句廢話。不同于其他語言,.NET平台向來以易用性著稱,不管是持續更新的C#文法,還是整個.NET平台,亦或者是有宇宙第一IDE著稱的VS,都表現出了這個特點。随着微軟開源、容器化、.NETCore、.NET5、.NET6等的出現,更是把性能和易用性發揮到極緻,單從技術上講,.NET可以說已經是名列前茅,如今國内大廠也都紛紛開始部分的轉向.NET平台。今天說的Sqlsugar便是.NET性能和易用性的代表之一,不同于EF的設計思想,相比于市面上的其他DBHelper,他更加簡單易用功能更全,可以說Sqlsugar是一個性能更強、更輕量的ORM架構。
附上官方位址:https://www.donet5.com/Home/Doc
廢話說完進入正題:
1、打開Nuget,搜尋安裝SqlsugarCore。
2、為了友善以後擴充,此處我們直接使用Sqlsugar多租戶(多資料庫)來注入資料庫連接配接,首先我們按照如下結建構立資料庫枚舉類型用于辨別資料庫:
3、接下來我們将資料庫連接配接字元串配置到配置檔案中(此處我們隻配置一個,後續可以配置多個),打開appsetting.json,清空檔案原内容,添加如下代碼:
{
"ConnectionStrings": {
"SugarConnectString": "server=localhost;Database=DBTest;Uid=root;Pwd=123456@q;"
}
}
4、打開Program.cs,添加如下代碼:
//引入配置檔案
var _config = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
#region 注入資料庫
builder.Services.AddScoped(options =>
{
return new SqlSugarClient(new List<ConnectionConfig>()
{
new ConnectionConfig() { ConfigId = DBEnum.預設資料庫, ConnectionString = _config.GetConnectionString("SugarConnectString"), DbType = DbType.MySql, IsAutoCloseConnection = true }
});
});
#endregion
Sqlsugar提供了多種資料庫,此處的資料庫連接配接字元串和資料庫類型你需要根據具體情況自行選擇
到此,我們Sqlsugar的基礎配置便已經完成。
5、Sqlsugar配置完畢,我們按照如下結構來建立實體類,為了友善開發,我們先建立一個實體基類EntityBase,然後建立Address類繼承于EntityBase
using SqlSugar;
namespace NET6.Domain.Entities
{
/// <summary>
/// 實體基類
/// </summary>
public class EntityBase
{
/// <summary>
/// 編号
/// </summary>
[SugarColumn(IsPrimaryKey = true, ColumnDescription = "主鍵")]
public string Id { get; set; } = Guid.NewGuid().ToString("N");
/// <summary>
/// 是否删除
/// </summary>
[SugarColumn(ColumnDescription = "是否删除")]
public bool IsDeleted { get; set; } = false;
/// <summary>
/// 建立者Id
/// </summary>
[SugarColumn(ColumnDescription = "建立者Id")]
public string CreateUserId { get; set; }
/// <summary>
/// 建立時間
/// </summary>
[SugarColumn(ColumnDescription = "建立時間")]
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 删除者Id
/// </summary>
[SugarColumn(ColumnDescription = "删除者Id")]
public string DeleteUserId { get; set; }
/// <summary>
/// 删除時間
/// </summary>
[SugarColumn(ColumnDescription = "删除時間")]
public DateTime DeleteTime { get; set; }
}
}
using SqlSugar;
namespace NET6.Domain.Entities
{
/// <summary>
/// 位址
/// </summary>
[SugarTable("address")]
public class Address : EntityBase
{
/// <summary>
/// 使用者ID
/// </summary>
public string UserId { get; set; }
/// <summary>
/// 收件人姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 收件人手機号
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 省份
/// </summary>
public string Province { get; set; }
/// <summary>
/// 城市
/// </summary>
public string City { get; set; }
/// <summary>
/// 區域
/// </summary>
public string Area { get; set; }
/// <summary>
/// 詳細位址
/// </summary>
public string Detail { get; set; }
/// <summary>
/// 是否是預設位址
/// </summary>
public bool IsDefault { get; set; }
}
}
6、為了更友善的使用資料庫,我們為解決方案新增一個控制台項目,并使用CodeFirst來同步資料庫表結構,新增控制台項目取名為EntitySync,打開Program.cs,添加如下代碼
// See https://aka.ms/new-console-template for more information
using NET6.Domain.Entities;
using SqlSugar;
var db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = "server=localhost;Database=DBTest;Uid=root;Pwd=123456@q;",
DbType = DbType.MySql,
IsAutoCloseConnection = true,
InitKeyType = InitKeyType.Attribute
});
#region Aop
//db.Aop.OnLogExecuting = (sql, pars) =>
//{
// Console.WriteLine(sql + "" + Db.Utilities.SerializeObject
// (pars.ToDictionary(it => it.ParameterName, it => it.Value)));
// Console.WriteLine();
//};
#endregion
#region 對話框
Console.WriteLine("是否确定同步資料庫表結構?(同名資料表将會被備份,生産環境慎用,回車确認)");
var str = Console.ReadKey();
if (str.Key == ConsoleKey.Enter)
{
Console.WriteLine("同步中,請稍後...");
}
else
{
Console.WriteLine("\r\n輸入錯誤,已退出...");
return;
}
#endregion
//同步資料表結構
db.DbMaintenance.CreateDatabase();
db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
{
typeof(Address)
});
Console.WriteLine("資料庫結構同步完成!");
7、将EntitySync設定為啟動項目,運作,打開資料庫會發現資料表已經建立完成。