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

EF Core根据ID删除数据时触发CS1061错误,求解决

修复EF Core中CS1061错误:TodoContext不包含TodoItems定义

问题场景

要实现按ID删除Todo数据,控制器代码中使用_context.TodoItems操作数据时,触发CS1061错误,提示TodoContext不包含TodoItems的定义。相关代码如下:

控制器代码

public async Task<IActionResult> RemoveTodoItem(int id)
{
    // TODO
    // Use EFCore to remove the item based on id

    var todoItem = await _context.TodoItems.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    _context.TodoItems.Remove(todoItem);
    await _context.SaveChangesAsync();

    return NoContent();
}

TodoContext代码

public class TodoContext: DbContext
{
    public DbSet<Todo> Todos { get; set; }

    public TodoContext(DbContextOptions<TodoContext> options) : base(options) {   }
}

Todo实体类代码

public class Todo
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public bool IsComplete { get; set; }
}

已确认数据库上下文已注入控制器,排除依赖注入问题。

解决方案

错误原因是DbSet属性名称不匹配:TodoContext中定义的DbSet属性名为Todos,但控制器代码中调用的是TodoItems,编译器无法找到对应属性。有两种修复方式:

方式一:修改控制器代码(推荐)

将控制器中所有TodoItems替换为Todos,与TodoContext中的DbSet名称保持一致:

public async Task<IActionResult> RemoveTodoItem(int id)
{
    var todoItem = await _context.Todos.FindAsync(id);

    if (todoItem == null)
    {
        return NotFound();
    }

    _context.Todos.Remove(todoItem);
    await _context.SaveChangesAsync();

    return NoContent();
}

方式二:修改TodoContext代码

如果想保留控制器中的TodoItems调用,可以修改TodoContext,将DbSet属性名改为TodoItems:

public class TodoContext: DbContext
{
    public DbSet<Todo> TodoItems { get; set; }

    public TodoContext(DbContextOptions<TodoContext> options) : base(options) {   }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:30