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

news/2024/5/19 21:30:28 标签: .netcore, sqlsugar, postgresql

一、环境说明

  • 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}' 下的数据库表。");
     }
 }


http://www.niftyadmin.cn/n/5447299.html

相关文章

【深度学习】四种天气分类 模版函数 从0到1手敲版本

引入该引入的库 import torch import torch.nn as nn import matplotlib.pyplot as plt import torch.nn.functional as F import torchvision import torch.optim as optim %matplotlib inline import os import shutil import glob os.environ["KMP_DUPLICATE_LIB_OK&q…

Python 打包输出exe

Python 打包输出exe python 中可以使用第三方库pyinstaller 来将Python代码打包成可执行程序exe. pyinstaller 会将python解释器,依赖的库,以及代码打包成一个单独的可执行文件.这样即使没有安装python 也可以运行程序. 1: 安装pyinstaller pip install pyinstaller2: 打包…

2024最新华为OD机试试题库全 -【虚拟理财游戏】- C卷

1. 🌈题目详情 1.1 ⚠️题目 在一款虚拟游戏中生活,你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。 现有一家Bank,它提供有若干理财产品 m 个,风险及投资回报不同,你有 N(元)进行投资,能接收的总风险值为X。 你要在可接受范围内选择最优的投资方式获得最…

阿里云云效-项目管理快速入门

目录 什么是项目 创建第一个项目 开始项目内协作 开启敏捷需求管理 什么是项目 项目&#xff0c;是围绕某一特定目标&#xff08;如产品交付或服务&#xff09;&#xff0c;组织相应人力、物力资源进行的临时性工作项目具有非常强的计划性&#xff0c;有确定的开始日期和结…

勒索病毒变种.360、.halo勒索病毒来袭,如何恢复受感染的数据?

引言&#xff1a; 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。近年来&#xff0c;勒索病毒成为了网络安全领域的一大难题&#xff0c;其中.360、.halo勒索病毒更是备受关注。本文将探讨.360、.halo勒索病毒的危害及应对策略&#xff0c;帮助大家更好地应对这一…

I2C系列(三):软件模拟I2C读写24C04

一.目标 PC 端的串口调试软件通过 RS-485 与单片机通信&#xff0c;控制单片机利用软件模拟 I2C 总线对 EEPROM&#xff08;24C04&#xff09; 进行任意读写。 二.RS-485简述 在工业控制领域&#xff0c;传输距离越长&#xff0c;要求抗干扰能力也越强。由于 RS-232 无法消除…

用cavans给图片加水印

原图片 index.html <html><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>images</title><script src"./vue.global.js"></script> </h…

clang-query 的编译安装与使用示例

1&#xff0c;clang query 概述 作用&#xff1a; 检查一个程序源码的抽象语法树&#xff0c;测试 AST 匹配器&#xff1b; 帮助检查哪些 AST 节点与指定的 AST 匹配器相匹配&#xff1b; 2&#xff0c;clang-query 安装 准备&#xff1a; git clone --recursive https://git…