一步一步創建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)


前言

上一篇《一步一步創建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)》我們通過如下操作:

  • 創建實體及工具類
  • 創建Repository類
  • 完善View層
    • 修改控制器
    • 創建視圖
    • 數據庫連接
    • 創建數據庫和表

實現了簡單的數據庫連接及數據查詢操作,既然是簡單的數據庫連接,那我們有必要對它進行進一步的升級、封裝。今天我們就引入一個國內開發者開發並維護的ORM開源框架。如果你當前還不知道什么是ORM,或者C#/.NET中有哪些主流的ORM的話,請參見本站的關於ORM相關的文章:

本篇知識要點

  • 引用SqlSugar
  • 使用SqlSugar對Repository類的改造

安裝SqlSugar

還是熟悉的配方,還是熟悉的味道,和前文一樣我們同樣使用Nuget程序包管理工具來安裝SqlSugar這個ORM組件:

create-aspnet-mvc-5-web-application-repository-autofac-automapper-sqlsugar-step-by-step-03-01.png

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

create-aspnet-mvc-5-web-application-repository-autofac-automapper-sqlsugar-step-by-step-03-02.png

使用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直接運行,會得到如下錯誤:

create-aspnet-mvc-5-web-application-repository-autofac-automapper-sqlsugar-step-by-step-03-03.png

因為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操作數據庫一樣的運行效果了:

1721957107-59e86451d70ec_articlex

OK,關於SqlSugar的基本集成和使用已實現,今天這篇文章就到這里,感謝你的耐心閱讀。

本文同步發表至 圖享網 [《一步一步創建ASP.NET MVC5程序Repository+Autofac+Automapper+SqlSugar》]10


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM