已关注 this tutorial ,我得到的生成的 GetTodoItem(long id) 方法与示例中的方法不同。它包括对 _context.TodoItems
的空检查。现在,当编写我自己的 Controller 方法时,我想知道是否应该执行这些空检查。
请注意,TodoContext 属性不可为 null,但可以实例化为 null (= null!
)。我目前使用的是 .NET 6,但想知道 .NET 8 的答案是否有所不同。请记住,我是 .NET 的新手。
public class TodoContext : DbContext {
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{}
public DbSet<TodoItem> TodoItems { get; set; } = null!;
}
他们生成的代码
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null) {
return NotFound();
}
return todoItem;
}
我生成的代码
[HttpGet("{id}")]
public async Task<ActionResult<TodoItem>> GetTodoItem(long id)
{
if (_context.TodoItems == null) {
return NotFound();
}
var todoItem = await _context.TodoItems.FindAsync(id);
if (todoItem == null) {
return NotFound();
}
return todoItem;
}
我遇到了两种不同的处理问题的方法。
最佳答案
Should one null check .NET EF Core DbContext properties before using
不,DbSet
属性由 EF Core 管理,如果它们由于某种原因将为 null - 发生了非常非常糟糕的事情,并且 null 检查将无济于事。
至于 Prop - 你有nullable reference types功能已启用,因此请查看 Working with Nullable Reference Types: DbContext and DbSet您可以将设置更改为:
public class TodoContext : DbContext {
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{}
public DbSet<TodoItem> TodoItems => Set<TodoItem>();
}
所以= null!
不会打扰眼睛。
关于c# - 使用前是否应检查 .NET EF Core DbContext 属性为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77521863/