一、环境说明
- 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}' 下的数据库表。");}}