【從零開始搭建本身的.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前端框架後,會將該功能集成到後臺管理系統裏,從而實如今後臺經過填寫數據表名+點擊按鈕就能夠生成實體類的功能

相關文章
相關標籤/搜索