当前位置: 首页 > news >正文

.NET Core 将实体类转换为 SQL(ORM 映射)

一、环境说明

  • PostgreSQL 数据库
  • Npgsql 数据库连接库
  • SqlSugar ORM 框架

二、映射流程

1、创建数据库

检查指定数据库是否存在,如果不存在则创建数据库。

2、初始化 SqlSugar 实例

使用 SqlSugarClient 初始化数据库连接配置。

3、筛选实体类

根据指定的命名空间和排除条件筛选需要创建表的实体类。

4、创建表

使用 CodeFirst.InitTables 方法创建数据库表。

 /// <summary>/// 加载数据并初始化数据库表/// </summary>public class CreateDatabases{/// <summary>/// 加载数据并初始化数据库表/// </summary>public static void LoadData(){// 数据库连接字符串string connectionString = "Host=127.0.0.1;Port=5432;Username=postgres;Password=admin;";// 要创建的数据库名称 !!!注意这里对大小写不敏感!!!string databaseName = "databasename";// 连接到 PostgreSQL 服务器using (var connection = new NpgsqlConnection(connectionString)){connection.Open();// 检查数据库是否已经存在using (var checkCommand = new NpgsqlCommand($"SELECT 1 FROM pg_catalog.pg_database WHERE datname = '{databaseName}';", connection)){bool databaseExists = checkCommand.ExecuteScalar() != null;if (!databaseExists){// 创建数据库using (var createCommand = new NpgsqlCommand($"CREATE DATABASE {databaseName};", connection)){createCommand.ExecuteNonQuery();Console.WriteLine($"数据库“{databaseName}”创建成功。");}}else{Console.WriteLine($"数据库“{databaseName}”已经存在,跳过创建。");}}}// 初始化 SQLSugar 实例var db = new SqlSugarClient(new ConnectionConfig{ConnectionString = $"{connectionString}Database={databaseName};Pooling=true;Maximum Pool Size=100",DbType = DbType.PostgreSQL,IsAutoCloseConnection = true,});// 指定命名空间string namespaceName = "CJ.Daangene.Infrastructure.Models";// 获取命名空间下的所有实体类的 Type 对象数组,排除掉不需要的类var entityTypes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == namespaceName && !IsExcluded(t)).ToArray();// 创建表db.CodeFirst.InitTables(entityTypes);// 判断某个类是否需要排除static bool IsExcluded(Type type){// 排除名称为 "TransactionBase" 或者 "TransactionData" 等指定名称的类if (new[] { "TransactionBase", "TransactionData", "TransactionScope","EntityBase",}.Contains(type.Name)){return true;}// 排除枚举类型if (type.IsEnum){return true;}// 排除名称为 "<>c" 或者 "<>c__DisplayClass0_0" 的类if (type.Name == "<>c" || type.Name == "<>c__DisplayClass0_0"){return true;}return false; // 默认不排除}Console.WriteLine($"已初始化命名空间 '{namespaceName}' 下的数据库表。");}}

相关文章:

  • 文件上传二—WEB攻防-PHP应用文件上传中间件CVE解析第三方编辑器已知CMS漏洞
  • HarmonyOS NEXT应用开发之ArkWeb同层渲染
  • 自动驾驶轨迹规划之时空语义走廊(一)
  • 鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染
  • Linux环境变量【终】
  • element-ui checkbox 组件源码分享
  • 10、chrome拓展程序的实现
  • 01分布式搜索引擎ES
  • GT20L16S1Y标准汉字字库芯片完全解析(2)
  • 基于FPGA的UDP协议栈设计第三章_ARP层设计
  • RESTful架构
  • 零基础-MySQL数据库的基本操作
  • PWM脉宽调制技术
  • 第十节:Vben Admin实战-系统管理之角色管理实现(分页查询,修改)-中
  • creator-webview与Android交互
  • 【EOS】Cleos基础
  • Centos6.8 使用rpm安装mysql5.7
  • conda常用的命令
  • git 常用命令
  • JAVA 学习IO流
  • leetcode386. Lexicographical Numbers
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • WebSocket使用
  • 深度学习入门:10门免费线上课程推荐
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • # C++之functional库用法整理
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2)STL算法之元素计数
  • (七)Knockout 创建自定义绑定
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (一)SpringBoot3---尚硅谷总结
  • (一)为什么要选择C++
  • (转)关于pipe()的详细解析
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .Net mvc总结
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • @javax.ws.rs Webservice注解
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BSGS算法]纯水斐波那契数列
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [git] windows系统安装git教程和配置
  • [Java] IDEA Scala环境搭建
  • [json]定义、读写
  • [LeetCode] Max Points on a Line
  • [lesson17]对象的构造(上)
  • [MYSQL]mysql将两个表结果合并到一起
  • [one_demo_2]使用正则表达式过滤字符串