前言
上一篇《一步一步創建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)》我們通過如下操作:
- 創建實體及工具類
- 創建Repository類
- 完善View層
- 修改控制器
- 創建視圖
- 數據庫連接
- 創建數據庫和表
實現了簡單的數據庫連接及數據查詢操作,既然是簡單的數據庫連接,那我們有必要對它進行進一步的升級、封裝。今天我們就引入一個國內開發者開發並維護的ORM開源框架。如果你當前還不知道什么是ORM,或者C#/.NET中有哪些主流的ORM的話,請參見本站的關於ORM相關的文章:
本篇知識要點
- 引用SqlSugar
- 使用SqlSugar對Repository類的改造
安裝SqlSugar
還是熟悉的配方,還是熟悉的味道,和前文一樣我們同樣使用Nuget程序包管理工具來安裝SqlSugar這個ORM組件:

由於本系列使用的是MySQL數據庫,所以,為了支持MySQL數據庫,還需要安裝SqlSugar的MySQL組件包--mySqlSugar:

使用SqlSugar連接MySQL數據庫
在完成了SqlSugar的安裝后,我們去到SqlSugar的官網查看對應的數據庫接,地址:SqlSugar連接數據庫文檔,說明如下:
SqlSugarClent是通過參數ConnectionConfig進行創建的,ConnectionConfig有四個屬性分別是:
1.Connection:連接字符串
2.DataType: 數據庫類型
3.IsAutoCloseConnection:是否自動釋放數據庫,設為true我們不需要close或者Using的操作,比較推薦
4.InitKeyType:初始化主鍵和自增列信息的方式
InitKeyType.SystemTable表示自動從數據庫讀取主鍵自增列的信息
InitKeyType.Attribute 表示從屬性中讀取 主鍵和自增列的信息
連接示例如下:
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig() {
ConnectionString = Config.ConnectionString, //必填
DbType = DbType.SqlServer, //必填
IsAutoCloseConnection = true, //默認false
InitKeyType=InitKeyType.SystemTable }); //默認SystemTable
OK,我們在項目[TsBlog.Repositories]中創建一個用於管理數據庫連接配置的類:Config.cs,代碼如下:
using System.Configuration;
namespace TsBlog.Repositories
{
/// <summary>
/// 靜態配置類
/// </summary>
public static class Config
{
/// <summary>
/// 數據庫連接字符串(私有字段)
/// </summary>
private static readonly string _connectionString =ConfigurationManager.ConnectionStrings["TsBlogMySQLDb"].ConnectionString;
/// <summary>
/// 數據庫連接字符串(公有屬性)
/// </summary>
public static string ConnectionString
{
get { return _connectionString; }
}
}
}
再創建一個數據庫工廠管理類:DbFactory.cs:
using SqlSugar;
namespace TsBlog.Repositories
{
/// <summary>
/// 數據庫工廠
/// </summary>
public class DbFactory
{
/// <summary>
/// SqlSugarClient屬性
/// </summary>
/// <returns></returns>
public static SqlSugarClient GetSqlSugarClient()
{
var db = new SqlSugarClient(new ConnectionConfig()
{
ConnectionString = Config.ConnectionString, //必填
DbType = DbType.MySql, //必填
IsAutoCloseConnection = true, //默認false
InitKeyType = InitKeyType.Attribute
}); //默認SystemTable
return db;
}
}
}
最后改造PostRepository.cs類的代碼:
using System.Collections.Generic;
using TsBlog.Domain.Entities;
namespace TsBlog.Repositories
{
/// <summary>
/// POST表的數據庫操作類
/// </summary>
public class PostRepository
{
/// <summary>
/// 根據ID查詢
/// </summary>
/// <param name="id">Post ID</param>
/// <returns></returns>
public Post FindById(int id)
{
#region Ado.net讀取方式
//var ds = MySqlHelper.Query("SELECT * FROM tb_post WHERE Id=@Id", new MySqlParameter("@Id",id));
//var entity = ds.Tables[0].ToList<Post>().FirstOrDefault();
//return entity;
#endregion
#region SqlSugar讀取方式
using (var db = DbFactory.GetSqlSugarClient())
{
var entity = db.Queryable<Post>().Single(x => x.Id == id);
return entity;
}
#endregion
}
/// <summary>
/// 查詢所有數據
/// </summary>
/// <returns></returns>
public List<Post> FindAll()
{
#region Ado.net讀取方式
//var ds = MySqlHelper.Query("SELECT * FROM tb_post");
//return ds.Tables[0].ToList<Post>();
#endregion
#region SqlSugar讀取方式
using (var db = DbFactory.GetSqlSugarClient())
{
var list = db.Queryable<Post>().ToList();
return list;
}
#endregion
}
}
}
按F5直接運行,會得到如下錯誤:

因為SqlSugar是基於數據實體和屬性來處理映射的,在上面的示例中,我們還沒有配置實體對象(post)和數據表(tb_post)的映射關系。
我們回到項目【TsBlog.Domain】中,在此項目中也使用Nuget安裝SqlSugar,打開實體類:Post.cs文件,添加實體與數據庫的映射配置屬性,如下:
using SqlSugar;
using System;
namespace TsBlog.Domain.Entities
{
/// <summary>
/// 博文實體類
/// </summary>
[SugarTable("tb_post")]
public class Post
{
/// <summary>
/// ID
/// </summary>
[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]
public int Id { get; set; }
/// <summary>
/// 標題
/// </summary>
public string Title { get; set; }
/// <summary>
/// 內容
/// </summary>
public string Content { get; set; }
/// <summary>
/// 作者ID
/// </summary>
public string AuthorId { get; set; }
/// <summary>
/// 作者姓名
/// </summary>
public string AuthorName { get; set; }
/// <summary>
/// 創建時間
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 發布時間
/// </summary>
public DateTime PublishedAt { get; set; }
/// <summary>
/// 是否標識已刪除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 是否允許展示
/// </summary>
public bool AllowShow { get; set; }
/// <summary>
/// 瀏覽量
/// </summary>
public int ViewCount { get; set; }
}
}
其中的[SugarTable("tb_post")]就是SqlSugar處理實體類與數據表映射時的表配置,而[SugarColumn(IsIdentity = true, IsPrimaryKey = true)]則是實體屬性與表字段的映射配置,更多表和屬性的映射配置請看官方文檔,地址:http://www.codeisbug.com/Doc/8/1141
再次按F5運行,這次我們可以看到和上一篇使用Ado.net操作數據庫一樣的運行效果了:

OK,關於SqlSugar的基本集成和使用已實現,今天這篇文章就到這里,感謝你的耐心閱讀。
本文同步發表至 圖享網 [《一步一步創建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar》]10
