dbset 属性的 DBcontext 类中的不可为空属性警告

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)

哪一个是解决此警告的最佳选项,并且还支持测试用例。?

Pho*_*cUK 7

因为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!本质上是一种告诉编译器“我知道你认为这将是空的,但我知道得更清楚,并且知道当我需要它时它不会为空 - 所以不要警告我。”