You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.8 KiB
C#

using EntrustSettle.Common.Const;
using EntrustSettle.Common.DB.Extension;
using EntrustSettle.Controllers;
using EntrustSettle.Model;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
namespace EntrustSettle.Api.Controllers.Systems;
/// <summary>
/// 动态建表 CURD
/// </summary>
//[Authorize(Permissions.Name)]
[ApiExplorerSettings(GroupName = ApiGroupNameConst.System)]
public class CodeFirstController : BaseApiController
{
private readonly ISqlSugarClient _db;
public CodeFirstController(ISqlSugarClient db)
{
_db = db;
}
/// <summary>
/// 动态type
/// </summary>
/// <returns></returns>
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();
}
/// <summary>
/// 动态type 继承BaseEntity
/// </summary>
/// <returns></returns>
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();
}
/// <summary>
/// 测试建表
/// </summary>
/// <returns></returns>
[HttpPost]
public MessageModel TestCreateTable()
{
var type = GetDynamicType();
_db.CodeFirst.InitTables(type);
return SuccessMsg();
}
/// <summary>
/// 测试查询
/// </summary>
/// <returns></returns>
[HttpGet]
public MessageModel<object> TestQuery()
{
var type = GetDynamicType();
return Success(_db.QueryableByObject(type).ToList());
}
/// <summary>
/// 测试写入
/// </summary>
/// <returns></returns>
[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 SuccessMsg();
}
}