You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:50:06