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
相关产品推荐
相关产品推荐

