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

简介: 前言 上一篇《一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)》我们通过如下操作: 创建实体及工具类 创建Repository类 完善View层 修改控制器 创建视图 数据库连接 创建数据库和表 实现了简单的数据库连接及数据查询操作,既然是简单的数据库连接,那我们有必要对它进行进一步的升级、封装。

前言

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

本篇知识要点

  • 引用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]

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
1141 13
|
Ubuntu 持续交付 API
如何使用 dotnet pack 打包 .NET 跨平台程序集?
`dotnet pack` 是 .NET Core 的 NuGet 包打包工具,用于将代码打包成 NuGet 包。通过命令 `dotnet pack` 可生成 `.nupkg` 文件。使用 `--include-symbols` 和 `--include-source` 选项可分别创建包含调试符号和源文件的包。默认情况下,`dotnet pack` 会先构建项目,可通过 `--no-build` 跳过构建。此外,还可以使用 `--output` 指定输出目录、`-c` 设置配置等。示例展示了创建类库项目并打包的过程。更多详情及命令选项,请参考官方文档。
1213 12
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
498 7
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
540 2
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
612 0
|
XML 存储 安全
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
C#开发的程序如何良好的防止反编译被破解?ConfuserEx .NET混淆工具使用介绍
2323 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
410 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
966 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
580 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
410 0