using Tiobon.Core.Common.DB.Extension; using Tiobon.Core.Controllers; using Tiobon.Core.Model; using Tiobon.Core.Model.Models.RootTkey; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using NetTaste; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using SqlSugar; namespace Tiobon.Core.Api.Controllers.Systems; /// /// 动态建表 CURD /// [Route("api/Systems/[controller]/[action]")] [ApiController] [Authorize(Permissions.Name)] public class DynamicCodeFirstController : BaseApiController { private readonly ISqlSugarClient _db; public DynamicCodeFirstController(ISqlSugarClient db) { _db = db; } /// /// 动态type /// /// private Type GetDynamicType() { return _db.DynamicBuilder().CreateClass("DynamicTestTable") //{table} 占位符会自动替换成表名 .CreateIndex(new SugarIndexAttribute("idx_{table}_Code", "Code", OrderByType.Desc)) .CreateProperty("Id", typeof(int), new SugarColumn() {IsPrimaryKey = true, IsIdentity = true}) .CreateProperty("Code", typeof(string), new SugarColumn() {Length = 50}) .CreateProperty("Name", typeof(string), new SugarColumn() {Length = 50}) .WithCache() .BuilderType(); } /// /// 动态type 继承BaseEntity /// /// private Type GetDynamicType2() { return _db.DynamicBuilder().CreateClass("DynamicTestTable2", null, typeof(BaseEntity)) //{table} 占位符会自动替换成表名 .CreateIndex(new SugarIndexAttribute("idx_{table}_Code", "Code", OrderByType.Desc)) .CreateProperty("Code", typeof(string), new SugarColumn() {Length = 50}) .CreateProperty("Name", typeof(string), new SugarColumn() {Length = 50}) .WithCache() .BuilderType(); } /// /// 测试建表 /// /// [HttpPost] public MessageModel TestCreateTable() { var type = GetDynamicType(); _db.CodeFirst.InitTables(type); return Success(); } /// /// 测试查询 /// /// [HttpGet] public MessageModel TestQuery() { var type = GetDynamicType(); return Success(_db.QueryableByObject(type).ToList()); } /// /// 测试写入 /// /// [HttpPost] public MessageModel TestInsert(string code, string name) { var type = GetDynamicType(); var entity = Activator.CreateInstance(type); type.GetProperty("Code")!.SetValue(entity, code); type.GetProperty("Name")!.SetValue(entity, name); _db.InsertableByObject(entity).ExecuteCommand(); return Success(); } }