【从零开始搭建本身的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.3 自动生成实体类

系列目录html

.  建立项目并集成swagger
前端

  1.1 建立数据库

  1.2 完善json

二. 搭建项目总体架构api

三. 集成轻量级ORM框架——SqlSugar前端框架

  3.1 搭建环境架构

  3.2 实战篇:利用SqlSugar快速实现CRUDapp

  3.3 生成实体类框架

四. 集成JWT受权验证ide

 


 

 

本章欲利用SqlSugar自带DbFirst特性,实现将数据库表直接生成到项目的实体类中。

系统会根据数据库的某张表自动生成一个.cs文件,并把这个文件放到咱们项目的实体类层RayPI.Entity中。

 

1)数据库建表

在数据中新建一张用于测试的表——Book,字段有:Tid(Id),Title(书名),Writer(做者)。其中Tid为主键,并设置了自增加。而且每一个字段都添加了相应的注释文字。

 

2)RayPI.IService 数据接口层

添加IEntity接口类,该接口类与以前的接口类不太同样,它不用基础的CRUD函数,只有须要一个CreateEntity函数,用于生成实体类。

namespace RayPI.IService { /// <summary>
    /// 实体数据接口 /// </summary>
    public interface IEntity { /// <summary>
        /// 生成实体类 /// </summary>
        /// <param name="entityName"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        bool CreateEntity(string entityName,string filePath); } }
IEntity

 

3)RayPI.Service 数据接口层

该数据层须要使用SqlSugarClient,SimpleClient已经知足不了咱们的需求了。

using RayPI.IService; using RayPI.Model; using SqlSugar; using System; namespace RayPI.Service { /// <summary>
    /// 实体操做服务 /// </summary>
    public class EntityService : BaseDB, IEntity { public SqlSugarClient db = GetClient(); /// <summary>
        /// 生成实体类 /// </summary>
        /// <param name="entityName"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public bool CreateEntity(string entityName,string filePath) { try { db.DbFirst.IsCreateAttribute().Where(entityName).CreateClassFile(filePath); return true; } catch (Exception) { return false; } } } }
EntityService

其中entityName为表名,filePath为该.cs文件存储的位置。

 

4)RayPI 控制器层

新建一个控制器Entity,这里,有个额外的工做,就是咱们要获取到项目的实际路径,方法是利用IHostingEnvironment

using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using RayPI.Bussiness.Admin; namespace RayPI.Controllers.Admin { /// <summary>
    /// 实体操做模块 /// </summary>
    [Produces("application/json")] [Route("api/[controller]")] public class EntityController : Controller { private EntityBLL bll = new EntityBLL(); private readonly IHostingEnvironment _hostingEnvironment; /// <summary>
        /// 构造函数 /// </summary>
        /// <param name="hostingEnvironment"></param>
        public EntityController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment; } /// <summary>
        /// 生成实体类 /// </summary>
        /// <param name="entityName"></param>
        /// <returns></returns>
 [HttpPost] public JsonResult CreateEntity(string entityName=null) { if (entityName == null) return Json("参数为空"); return Json(bll.CreateEntity(entityName,_hostingEnvironment.ContentRootPath)); } } }
EntityController

这里的_hostingEnvironment.ContentRootPath获取到的是主项目目录,例如“D:\\MyProjects\RayPI/RayPI”,咱们要将实体类存入的地址应该是“D:\\MyProjects\RayPI/RayPI.Entity”下面,因此接下来还须要对这个地址进行相应操做。

 

5)RayPI.Bussiness 业务逻辑层

using RayPI.IService; using RayPI.Model; using RayPI.Service; namespace RayPI.Bussiness.Admin { public class EntityBLL { private IEntity iService = new EntityService(); public MessageModel<string> CreateEntity(string entityName,string contentRootPath) { string[] arr = contentRootPath.Split('\\'); string baseFileProvider = ""; for (int i = 0; i < arr.Length-1; i++) { baseFileProvider += arr[i]; baseFileProvider += "\\"; } string filePath = baseFileProvider + "RayPI.Entity"; if (iService.CreateEntity(entityName, filePath)) return new MessageModel<string> { Success = true, Msg = "生成成功" }; else
                return new MessageModel<string> { Success = false, Msg = "生成失败" }; } } }
EntityBLL

这里拿到的contentRootPath为主项目地址,因此我作了一点运算。

总感受.NET Core相比于.NET Framwork获取项目路径要费事不少,关于获取的各类方法,后面会再专门拿出一章来说。若是发现有比目前这种更方便的实现方法的话,我也会及时更新的。

 

 

下面F5运行调试,在swagger中进行测试。

输入表名(Book),点击Excute,返回“生成成功”

 

回到项目里,打开RayPi.Entity,发现比以前多了一个实体类——Book.cs

而且也同时生成了咱们为字段编写的注释和字段的自己属性(默认值、主键、自增加等)

 

到这,自动生成实体类的功能就算实现了,

后面咱们向项目集成layui前端框架后,会将该功能集成到后台管理系统里,从而实如今后台经过填写数据表名+点击按钮就能够生成实体类的功能

相关文章
相关标签/搜索