欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-20 23:28:55
系列目录 一. 创建项目并集成swagger 1.1 创建 1.2 完善 二. 搭建项目整体架构 三. 集成轻量级ORM框架——SqlSugar 3.1 搭建环境 3.2 实战篇:利用SqlSugar快速实现CRUD 3.3 自动生成实体类 本章欲利用SqlSugar自带DbFirst特性,实现将数 ......

系列目录

.  创建项目并集成swagger

  

  

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

  

  

  

 


 

 

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

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

 

1)数据库建表

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

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

 

2)RayPI.IService 数据接口层

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

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

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.3 自动生成实体类
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已经满足不了我们的需求了。

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

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.3 自动生成实体类
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

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

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.3 自动生成实体类
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 业务逻辑层

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

【从零开始搭建自己的.NET Core Api框架】(三)集成轻量级ORM——SqlSugar:3.3 自动生成实体类
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,返回“生成成功”

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

 

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

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

并且也同时生成了我们为字段编写的注释和字段的本身属性(默认值、主键、自增长等)

 

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

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