swa*_*bun 2 c# warnings entity-framework dbcontext dbset
我的数据库上下文类如下
public class DataContext : DbContext
{
public DataContext(DbContextOptions options) : base(options)
{
}
public DbSet<Customer> Customers;
public DbSet<Order> Orders;
}
Run Code Online (Sandbox Code Playgroud)
它警告说
non-nullable property 'Orders' must contain a non-null value when exiting the constructor. Consider declaring the property as nullable
Run Code Online (Sandbox Code Playgroud)
我手头上有两个选择可以解决,但不确定哪个是好的。
选项 1) 使属性可为空
public DbSet<Order>? Orders;
Run Code Online (Sandbox Code Playgroud)
选项 2) 在构造函数中将属性设置为空集
public DataContext(DbContextOptions options) : base(options)
{
this.Orders = this.Set<Order>();
}
Run Code Online (Sandbox Code Playgroud)
哪一个是解决此警告的最佳选项,并且还支持测试用例。?
因为DbSet<T>一旦创建上下文, a 就保证由 EF 填充(出于所有实际目的),因此您可以将其设置为null!而不更改实际类型:
public DbSet<Customer> Customers {get;set;} = null!;
public DbSet<Order> Orders {get;set;} = null!;
Run Code Online (Sandbox Code Playgroud)
这将满足不可为 null 的要求,而不会影响 EF。
null!本质上是一种告诉编译器“我知道你认为这将是空的,但我知道得更清楚,并且知道当我需要它时它不会为空 - 所以不要警告我。”