一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
前言
上一篇《一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)》我们通过如下操作:
- 创建实体及工具类
- 创建Repository类
- 完善View层
- 修改控制器
- 创建视图
- 数据库连接
- 创建数据库和表
实现了简单的数据库连接及数据查询操作,既然是简单的数据库连接,那我们有必要对它进行进一步的升级、封装。今天我们就引入一个国内开发者开发并维护的ORM开源框架。如果你当前还不知道什么是ORM,或者C#/.NET中有哪些主流的ORM的话,请参见本站的关于ORM相关的文章:
- 什么是ORM?为什么用ORM?浅析ORM的使用及利弊
- 目前的.NET(C#)世界里,主流的ORM框架有哪些--SqlSugar,Dapper,Entity Framework(EF)还是...
本篇知识要点
- 引用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.SqlServer, //必填 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](三)》