.net core 通过Sqlsugar生成实体

news2025/1/11 11:40:20

通过替换字符串的方式生成代码,其他代码也可以通这种方式生成
直接上代码

设置模板

在这里插入图片描述
将这几个模板文件设置为:嵌入资源
在这里插入图片描述
模板内容:

using SqlSugar;

namespace {Namespace}.Domain.Admin.{ModelName};
/// <summary>
/// {TableDisplayName}
///</summary>
[SugarTable("{TableName}")]
public class {ModelName}Entity
{
    {AttributeList}
}

生成代码

 /// <summary>
 /// 预览代码
 /// </summary>
 /// <param name="currentTableName">表名</param>
 /// <returns></returns>
 [HttpGet]
 public ProviewCodeOutput PreviewCode(string currentTableName)
 {
 	  //我是在其他类里面生成的代码,所以通过dll加载嵌入的资源
     // 通过 DLL 加载资源 
     var assemblyPath = Path.Combine(AppContext.BaseDirectory, "XR.Host.dll");

     var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyPath);

     var resourceName = assembly.GetManifestResourceNames().FirstOrDefault(a => a.Contains("ModelTemplate.txt"));

     var file = assembly.GetManifestResourceStream(resourceName);
     //实体模板
     var modelTemplate = new StreamReader(file).ReadToEnd();
     //仓储接口模板
     var IrepostoryTemplate = new StreamReader(
         assembly.GetManifestResourceStream(assembly.GetManifestResourceNames().FirstOrDefault(a => a.Contains("IRepositoryTemplate.txt")))
         ).ReadToEnd();
     //仓储接口模板
     var repostoryTemplate = new StreamReader(
         assembly.GetManifestResourceStream(assembly.GetManifestResourceNames().Where(a => a.Contains("RepositoryClassTemplate.txt")).First())
         ).ReadToEnd();


     var orm = LazyGetRequiredService<IUserRepository>().Orm;

     var table = orm.DbMaintenance.GetTableInfoList(true);

     //命名空间
     var Namespace = Assembly.GetExecutingAssembly().GetName().Name;

     var parentPath = new DirectoryInfo(Environment.CurrentDirectory).Parent + $"\\{Namespace}";

     var result = new ProviewCodeOutput();

     foreach (var tableInfo in table)
     {
         if (tableInfo.Name == currentTableName)
         {
             var modelName = tableInfo.Name.Replace("SYS_", "").Replace("TB_", "").Replace("TN_", "");
             modelName = ConvertToCamelCase(modelName);

             var tableColumn = orm.DbMaintenance.GetColumnInfosByTableName(tableInfo.Name);
             var attributes = BuildColumn(tableColumn);
			//通过替换字符串的方式生成代码
             result.ModalCode = modelTemplate.Replace("{Namespace}", Namespace)
                 .Replace("{ModelName}", modelName)
                 .Replace("{TableName}", tableInfo.Name)
                 .Replace("{TableDisplayName}", tableInfo.Description)
                 .Replace("{AttributeList}", attributes);

         }
     }
     return result;
 }
 private string BuildColumn(List<DbColumnInfo> columnInfos)
 {
     var attributes = new StringBuilder();
     foreach (var columnInfo in columnInfos)
     {
         attributes.Append("\r\n    /// <summary>");
         attributes.Append($"\r\n   /// {columnInfo.ColumnDescription}");
         attributes.Append("\r\n    /// </summary>");
         attributes.Append($"\r\n   [SugarColumn({(columnInfo.IsPrimarykey ? "IsPrimaryKey = true," : "")} ColumnName = \"{columnInfo.DbColumnName}\", {(columnInfo.IsNullable ? "IsNullable = true," : "")} ColumnDescription = \"{columnInfo.ColumnDescription}\")]");
         attributes.Append($"\r\n   public {SetDataType(columnInfo.DataType)}{(columnInfo.IsNullable ? "?" : "")} {ConvertToCamelCase(columnInfo.DbColumnName)} {{ get; set; }}");

     }
     return attributes.ToString();
 }
 private string SetDataType(string dataType)
 {
     dataType = dataType.ToLower();
     var result = dataType;
     switch (dataType)
     {
         case "int32":
             result = typeof(int).Name;
             break;
         case "int64":
             result = typeof(int).Name;
             break;
         case "datetime":
             result = typeof(DateTime).Name;
             break;
     }
     return result;
 }
 /// <summary>
 /// 将驼峰转换为字符串
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 private string ConvertToCamelCase(string input)
 {
     if (string.IsNullOrEmpty(input))
         return input;
     var text = input.Split('_');
     var camelTxt = "";
     TextInfo textInfo = CultureInfo.CurrentCulture.TextInfo;
     foreach (var c in text)
     {
         camelTxt += textInfo.ToTitleCase(c.ToLower());
     }
     return camelTxt;
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浪潮光纤交换机FS8500、FS8600、FS8900端口数量授权扩容方法

浪潮光纤交换机FS8500、FS8600、FS8900系列是OEM博通G610、G620、G630光纤交换机&#xff0c;激活方法也是和博通一样的 获取设备License id 登录光纤交换机&#xff0c;可以使用Console线&#xff0c;也可以使用网线ssh登录默认ip&#xff1a;10.77.77.77&#xff0c;这里推…

【北京迅为】《STM32MP157开发板使用手册》- 第二十六章Cortex-M4 GPIO_蜂鸣器实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

浅谈电动汽车公共充电桩布局设计及解决方案

摘要&#xff1a;随着社会现代化的深入推进&#xff0c;环境保护和资源利用可持续化发展的重要性愈发显著。电动汽车因其在节能、效率、环保等方面的突出优势&#xff0c;开始越来越多的进入城市交通系统。然而目前充电桩等相关配套设施缺乏合理的设置依据&#xff0c;不利于电…

【区块链通用服务平台及组件】中金数据云链平台 | FISCO BCOS应用案例

近年来&#xff0c;湖北省、武汉市区块链产业加快发展&#xff0c;在供应链管理、产品溯源等诸多领域逐步落地&#xff0c;形成了良好创新 创业氛围。2022 年 8 月&#xff0c;武汉市正式获批建设国家区块链发展先导区。中金数据&#xff08;武汉&#xff09;超算技术有限公司以…

组织数据能力评估模型一览

组织数据能力的成熟度等评估模型主要包括&#xff1a;DCMM、DSMM、DCAM、DAMA等。最新版《DMBOK2.1》 中&#xff0c;对于数据成熟度评估模型的选择给出了应考虑的标准&#xff1a; 可访问性&#xff1a;实践以非技术术语陈述&#xff0c;传达活动的功能要义。全面性&#xff…

HBase在大数据实时处理中的角色

HBase是一个分布式的、面向列的开源NoSQL数据库&#xff0c;它建立在Hadoop的HDFS之上&#xff0c;被设计用于处理大规模数据集。HBase非常适合于需要随机实时读写访问的应用程序&#xff0c;例如大数据分析、数据仓库和实时数据处理等场景。本文将探讨HBase是如何进行大数据实…

SpinalHDL之数据类型(六)

本文作为SpinalHDL学习笔记第五十九篇,介绍SpinalHDL的Vec数据类型。 目录: 1.描述(Description) 2.声明(Declaration) 3.操作符(Operators) ⼀、描述(Description) Vec是定义了⼀组带有标号的信号的复合信号(基于SpinalHDL基础类别)。 ⼆、声明(Declaration) 声明向量的…

最新消息,OpenAI o 1 一种新的大型语言模型正在被引入

据最新消息。 我们正在引入OpenAI o 1&#xff0c;这是一种新的大型语言模型&#xff0c;经过强化学习训练&#xff0c;可以执行复杂的推理。O 1在回答之前思考--它可以在对用户做出响应之前产生一个很长的内部思考链。 OpenAI o 1在竞争性编程问题&#xff08;Codeforces&am…

GaN挑战Si价格底线?英飞凌推出全球首个12英寸GaN晶圆技术

昨日&#xff0c;英飞凌宣布已成功开发出全球首个12英寸功率氮化镓GaN晶圆技术&#xff0c;并计划在今年的德国慕尼黑展上向公众展示首批12英寸GaN晶圆。 据英飞凌介绍&#xff0c;12英寸晶圆上的芯片生产在技术上更先进&#xff0c;效率也有显著提高&#xff0c;相较于8英寸晶…

Serverless 安全新杀器:云安全中心护航容器安全

作者&#xff1a;胡志广(独鳌) 云安全中心对于 Serverless 容器用户的价值 从云计算发展之初&#xff0c;各大云厂商及传统安全厂商就开始围绕云计算的形态来做安全解决方案。传统安全与云计算安全的形态与做法开始发生变化&#xff0c;同时随着这 10 多年的发展&#xff0c;…

JavaWeb开发中为什么Controller里面的方法是@RequestMapping?

在Java Web开发中&#xff0c;尤其是在使用Spring MVC框架时&#xff0c;RequestMapping注解被广泛应用于Controller层的方法上&#xff0c;这是因为RequestMapping是Spring MVC提供的一个核心注解&#xff0c;用于将HTTP请求映射到相应的处理器类或处理器方法上。通过这种方式…

安全隔离上网的有效途径:沙盒

在数字化浪潮日益汹涌的今天&#xff0c;网络安全成为了不可忽视的重要议题。沙箱技术作为一种高效的隔离机制&#xff0c;为企业和个人提供了一种在享受网络便利的同时&#xff0c;保障系统安全的解决方案。本文旨在深入探讨沙箱技术如何做到隔离上网&#xff0c;从而为用户提…

什么开放式耳机好用?2024五款宝藏品牌推荐!

在移动互联网时代&#xff0c;耳机已成为许多人生活中不可或缺的一部分&#xff0c;无论是在通勤路上还是运动时&#xff0c;它们都能提供音乐享受&#xff0c;同时减轻压力。然而&#xff0c;长时间佩戴入耳式耳机可能会引起耳道不适甚至炎症。因此&#xff0c;开放式耳机因其…

STM32 如何生成随机数

目录 一、引言 二、STM32 随机数发生器概述 三、工作原理 1.噪声源 2.线性反馈移位寄存器&#xff08;LFSR&#xff09; 3.数据寄存器&#xff08;RNG_DR&#xff09; 4.监控和检测电路&#xff1a; 5.控制和状态寄存器 6.生成流程 四、使用方法 1.使能随机数发生器 …

洛谷 P3065 [USACO12DEC] First! G

原题点这里​​​​​​ 题目来源于&#xff1a;洛谷 题目本质&#xff1a;字符串&#xff0c;Hash&#xff0c;字典树Trie 题目思路&#xff1a; 因为涉及到字典序的问题&#xff0c;那么应该能想到字典树。很显然字符串s1如果比字符串s2的字典序小的话&#xff0c;只有两种…

sms4j 发送短信

一、使用介绍 技术介绍&#xff1a; SMS4J: 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 项目地址&#xff1a; SMS4J: 让简单的事情回归简单的本质。 SMS4J为短信聚合框架&#xff0c;帮您轻松集成多家短信服务&#xff0c;解决接入多个短信SDK的繁琐流程。 目前已…

8招教你轻松解决职场甩锅PUA!

你是不是四十岁了还不知道解决职场甩锅行为也是有公式的&#xff01; 那些混得好&#xff0c;能轻松赢得领导赏识&#xff0c;快速升职的&#xff0c;都 是早就把这些技巧背的滚瓜烂熟&#xff01; 比如&#xff1a; 1、同事的错&#xff0c;领导误会是你 错误话术 这不是…

【Linux】在Windows搭建WSL2开发环境

在Windows搭建WSL2开发环境 WSL安装和调整更改安装位置变更默认apt源 Python环境变更默认Python版本安装pip WSL安装和调整 这里使用的WSL2&#xff0c;Ubuntu22.04 如果在WSL中需要使用系统代理但是报以下的错&#xff1a; 在当前Windows用户目录下创建.wslconfig并写入以下配…

网络工程师考试真题及解析

1. 在不同类型的操作系统中&#xff0c;批处理操作系统的缺点是&#xff08;&#xff09;。 A) 缺少交互性 B) 不能并发运行 C) CPU利用率低 D) 周转时间太长 A【解析】批处理操作系统的优点是作业流程自动化较高&#xff0c;资源利用率较高&#xff0c;作业吞吐量大&…

word文档无损原样转pdf在windows平台使用python调用win32com使用pip安装pywin32

前提&#xff1a; windows环境下&#xff0c;并且安装了office套装&#xff0c;比如word,如果需要调用excel.也需要安装。在另外的文章会介绍。这种是直接调用word的。所以还原度会比较高。 需求&#xff1a; word文档转pdf,要求使用命令行形式&#xff0c;最终发布为api接口…