我正在开发 ASP.NET Core 应用程序并遇到 Entity Framework Core 问题。尽管在我的任务实体中定义了主键,但在尝试创建 DbContext 实例时收到错误。错误信息是:
无法创建类型为“”的“DbContext”。异常“实体类型‘任务’需要定义主键”。如果您打算使用无键实体类型,请在“OnModelCreating”中调用“HasNoKey”。
这是我的任务实体的相关代码:
using System.ComponentModel.DataAnnotations;
namespace taskManager.Services.TaskApi.Models
{
public class Task
{
[Key]
public int TaskId { get; set; }
[Required]
public string Title { get; set; }
public string Description { get; set; }
[Required]
public DateTime DateTime { get; set; }
public bool IsCompleted { get; set; }
public bool IsImportant { get; set; }
}
}
我的 AppDbContext 看起来像这样:
using Microsoft.EntityFrameworkCore;
using taskManager.Services.TaskApi.Models;
namespace taskManager.Services.TaskApi.Data
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
public DbSet<Task> Tasks { get; set; }
}
}
DbContext 在我的 Program.cs 中注册如下:
var builder = WebApplication.CreateBuilder(args);
// ... other configurations ...
builder.Services.AddDbContext<AppDbContext>(option =>
{
option.UseSqlServer("Server=DESKTOP-39TI737\\SQLEXPRESS;Database=Manage_Task;Trusted_Connection=True;TrustServerCertificate=True");
});
// ... other configurations ...
如果 EF 不明白您的主键应该自动生成,您始终可以添加注释属性来使用 Identity 标志标记您的实体,该标志将启用自动递增 ID 字段的功能。修改后,请确保您创建了新的迁移并更新了数据库。
更新实体:
using System.ComponentModel.DataAnnotations;
namespace taskManager.Services.TaskApi.Models
{
public class Task
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int TaskId { get; set; }
[Required]
public string Title { get; set; }
public string Description { get; set; }
[Required]
public DateTime DateTime { get; set; }
public bool IsCompleted { get; set; }
public bool IsImportant { get; set; }
}
}
对于目前的情况了解发生了什么:
检查您的数据库。我记得你的
TaskId
应该标记为 PK 并且应该启用 Identity
选项。