.NET Core 8中不使用内联SQL动态创建订阅者自定义名称表
.NET Core 8 Code-First 实现 PostgreSQL 订阅者交易历史表
1. 准备依赖包
- 安装所需NuGet包:
Npgsql.EntityFrameworkCore.PostgreSQL(PostgreSQL的EF Core适配包)Microsoft.EntityFrameworkCore.Tools(用于执行迁移命令)
2. 定义实体类
根据需求创建两个实体,对应两张自定义表:
// 订阅者通用交易记录表 public class SubscriberTransaction { public int Id { get; set; } public string SubscriberId { get; set; } = string.Empty; public decimal TransactionAmount { get; set; } public DateTime TransactionTime { get; set; } public string TransactionCategory { get; set; } = string.Empty; // 如"订阅扣费"、"余额充值" } // 订阅专属交易记录表 public class SubscriberSubscriptionTransaction { public int Id { get; set; } public string SubscriberId { get; set; } = string.Empty; public string PlanCode { get; set; } = string.Empty; public DateTime SubscriptionActivateTime { get; set; } public DateTime SubscriptionExpireTime { get; set; } public decimal PlanPrice { get; set; } public string TransactionResult { get; set; } = string.Empty; // 如"成功"、"失败" }
3. 配置DbContext与自定义表名
创建DbContext类,通过Fluent API指定自定义表名,替代EF Core默认的复数表名:
using Microsoft.EntityFrameworkCore; public class SubscriptionDbContext : DbContext { public SubscriptionDbContext(DbContextOptions<SubscriptionDbContext> options) : base(options) { } // 声明实体对应的DbSet public DbSet<SubscriberTransaction> SubscriberTransactions { get; set; } public DbSet<SubscriberSubscriptionTransaction> SubscriberSubscriptionTransactions { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // 配置第一张自定义表名 modelBuilder.Entity<SubscriberTransaction>() .ToTable("subscriber_general_transactions"); // 配置第二张自定义表名 modelBuilder.Entity<SubscriberSubscriptionTransaction>() .ToTable("subscriber_subscription_transactions"); // 可选:添加索引优化查询 modelBuilder.Entity<SubscriberTransaction>() .HasIndex(t => t.SubscriberId); modelBuilder.Entity<SubscriberSubscriptionTransaction>() .HasIndex(t => new { t.SubscriberId, t.PlanCode }); } }
4. 配置数据库连接字符串
在appsettings.json中添加PostgreSQL连接信息:
{ "ConnectionStrings": { "DefaultConnection": "Host=localhost;Database=YourDbName;Username=YourDbUser;Password=YourDbPwd" } }
5. 注册DbContext到依赖注入
在Program.cs中完成DbContext的注册:
var builder = WebApplication.CreateBuilder(args); // 注册DbContext builder.Services.AddDbContext<SubscriptionDbContext>(options => options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection"))); // 其他服务注册逻辑... var app = builder.Build(); // 中间件配置逻辑... app.Run();
6. 创建并执行迁移
通过终端或Package Manager Console执行命令完成表创建:
- 生成迁移文件:
Add-Migration InitTransactionTables - 将迁移应用到数据库:
Update-Database
以上操作全程采用Code-First模式,未使用任何内联SQL,最终会在指定PostgreSQL库中生成两张自定义名称的交易记录表。
内容的提问来源于stack exchange,提问作者Kavya
相关产品推荐
相关产品推荐

