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

