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

EF Core 6:如何为AvengerContext添加实体及实体配置

实现实体类、实体配置并关联AvengerContext的步骤

1. 创建实体类

定义对应数据库表的实体类,以Avenger为例:

public class Avenger
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public string RealName { get; set; } = string.Empty;
    public decimal PowerLevel { get; set; }
    public DateTime JoinedDate { get; set; }
}

注:属性初始化赋值string.Empty是为了符合.NET 6的nullable引用类型规则,避免空引用警告。

2. 扩展AvengerContext添加DbSet

由于原AvengerContext是partial类,我们可以在同一命名空间下创建另一个partial类进行扩展,无需修改原dll中的代码:

public partial class AvengerContext
{
    public DbSet<Avenger> Avengers { get; set; } = null!;
}

注:null!用于告诉编译器该属性不会为null,EF Core会在上下文初始化时自动赋值。

3. 创建实体配置类

实现IEntityTypeConfiguration<Avenger>接口,配置实体与数据库表的映射规则:

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

public class AvengerConfiguration : IEntityTypeConfiguration<Avenger>
{
    public void Configure(EntityTypeBuilder<Avenger> builder)
    {
        // 指定数据库表名
        builder.ToTable("avengers");

        // 配置主键及自增规则(MySQL AUTO_INCREMENT)
        builder.HasKey(a => a.Id);
        builder.Property(a => a.Id).UseMySqlIdentityColumn();

        // 配置Name列:非空、最大长度50
        builder.Property(a => a.Name)
               .IsRequired()
               .HasMaxLength(50)
               .HasColumnType("varchar(50)");

        // 配置RealName列:非空、最大长度100
        builder.Property(a => a.RealName)
               .IsRequired()
               .HasMaxLength(100)
               .HasColumnType("varchar(100)");

        // 配置PowerLevel列:decimal类型(5,2)、非空
        builder.Property(a => a.PowerLevel)
               .IsRequired()
               .HasColumnType("decimal(5,2)");

        // 配置JoinedDate列:datetime类型、非空
        builder.Property(a => a.JoinedDate)
               .IsRequired()
               .HasColumnType("datetime");
    }
}

注:UseMySqlIdentityColumn()是Pomelo EF Core针对MySQL提供的扩展方法,需确保已安装Pomelo.EntityFrameworkCore.MySql包。

4. 确保配置类被上下文扫描

原AvengerContext的OnModelCreating方法已调用modelBuilder.ApplyConfigurationsFromAssembly(typeof(AvengerContext).Assembly),只要你的AvengerConfiguration类与AvengerContext在同一程序集下,EF Core会自动扫描并应用该配置。若配置类在其他程序集,可修改该行代码为:

modelBuilder.ApplyConfigurationsFromAssembly(typeof(AvengerConfiguration).Assembly);

5. 注册上下文到DI容器(API项目)

安装必要NuGet包

Install-Package Pomelo.EntityFrameworkCore.MySql
Install-Package Microsoft.EntityFrameworkCore.Design

在Program.cs中注册上下文

var builder = WebApplication.CreateBuilder(args);

// 注册AvengerContext并配置MySQL连接
builder.Services.AddDbContext<AvengerContext>(options =>
{
    var connectionString = builder.Configuration.GetConnectionString("AvengerDb");
    options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString));
});

// 其他API配置逻辑...

var app = builder.Build();

// 中间件配置逻辑...

app.Run();

在appsettings.json中添加连接字符串

{
  "ConnectionStrings": {
    "AvengerDb": "server=localhost;database=AvengerDb;user=root;password=你的数据库密码;"
  }
}

6. 迁移并更新数据库

使用Package Manager Console执行命令:

Add-Migration InitialCreate
Update-Database

或使用.NET CLI命令:

dotnet ef migrations add InitialCreate
dotnet ef database update

内容的提问来源于stack exchange,提问作者Varanasi Phaneendra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 05:27:25