我正在一个.NET Core 3.0项目中启用C# 8.0可空引用类型。该项目使用Entity Framework Core 3.0访问数据库。
以下是一个数据模型,其标题不应为null。
public class Vehicle
{
public int Id { get; private set; }
public string Title { get; private set; }
// Entity Framework Core is instructed to bind to the private _drivers field in a configuration builder
private readonly List<Driver> _drivers = new List<Driver>();
public IReadOnlyCollection<Driver> Drivers => _drivers.AsReadOnly();
private Vehicle()
{
}
public Vehicle(string title)
{
this.Title = title;
}
public void AddDriver(string name)
{
this._drivers.Add(new Driver(name));
}
}
// A foreign column is defined in a configuration builder
public class Driver
{
public int Id { get; private set; }
public string Name { get; private set; }
private Driver()
{
}
public Driver(string name)
{
this.Name = name;
}
}
自己编写的代码应该只使用public
构造函数,而private
构造函数只是为了允许Entity Framework Core和(可能也包括)序列化将值从数据库绑定到这些类/模型。公共构造函数可能具有不同的结构、参数列表和类型,与模型具有的属性不同(例如,它可能还包含第一个必需子元素的参数,它可能有一些可选参数等)。
然而,编译器会在private
构造函数上生成CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
。
我能够通过#pragma warning disable CS8618
禁用private
构造函数的CS8616,但我不认为这是一个好主意。
在这种情况下,应如何使用C# 8.0可空引用类型?或者我的模型是否存在问题或违反最佳实践——如何正确地进行操作?
不幸的是,我没有找到相关的文档或指导。