zoukankan      html  css  js  c++  java
  • 一步一步创建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

  • 相关阅读:
    Mybatisplus基本用法
    在Linux上安装JDK
    SpringCloud Hystrix(服务熔断/降级)
    easyPOI基本用法
    SpringCloud Sleuth
    SpringBoot常见的异常问题
    RabbitMQ
    SpringCloud之服务网关
    Spring Cloud alibaba
    SpringCloud之服务配置
  • 原文地址:https://www.cnblogs.com/bobositlife/p/create-aspnet-mvc-5-web-application-repository-autofac-automapper-sqlsugar-step-by-step-03.html
Copyright © 2011-2022 走看看