执行Add-Migration 'init'遇'Task'实体需定义主键错误求助
解决Add-Migration报错“entity type 'Task' requires a primary key to be defined”
问题根源
你的自定义Task模型类和.NET框架内置的System.Threading.Tasks.Task类型重名,导致EF Core在解析实体时混淆了类型,误将内置的Task(无主键定义)当作你的实体类,从而抛出主键缺失的错误。
解决方法
方法1:重命名自定义Task类
把你的模型类改成非冲突的名称,比如TodoTask或AppTask,同时更新DbContext中的引用:
修改后的Task模型:
using Microsoft.EntityFrameworkCore; using System.Runtime.CompilerServices; namespace FNSHR.Models { public class TodoTask { public int Id { get; set; } public string Name { get; set; } public string Deadline { get; set; } } }
修改后的DbContext:
using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using FNSHR.Models; namespace FNSHR.Data { public class AppDbContext : DbContext { protected readonly IConfiguration Configuration; public AppDbContext(IConfiguration configuration) { Configuration = configuration; } public DbSet<TodoTask> Tasks { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) { options.UseSqlServer(Configuration.GetConnectionString("DbConnectionString")); } } }
方法2:使用完全限定名指定实体类型
如果不想重命名类,在DbContext的DbSet中使用模型的完整命名空间限定名,明确告诉EF Core要使用你的自定义Task类:
修改DbContext中的DbSet定义:
public DbSet<FNSHR.Models.Task> Tasks { get; set; }
验证步骤
- 保存所有修改后,先执行
dotnet build确保项目编译通过 - 重新运行
Add-Migration 'init'命令
内容的提问来源于stack exchange,提问作者Akidoo
相关产品推荐
相关产品推荐

