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

执行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; }

验证步骤

  1. 保存所有修改后,先执行dotnet build确保项目编译通过
  2. 重新运行Add-Migration 'init'命令

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:27:18