Я вмикаю C # 8.0 Nullable Reference Types у .NET Core 3.0 проект. Проект використовує Entity Framework Core 3.0 для доступу до бази даних.
Далі наведена модель даних, назва якої не повинна бути нульовою.
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 та (можливо також) серіалізацією прив’язувати значення з бази даних до цих класів / моделей. Загальнодоступний конструктор може мати іншу структуру, список та типи аргументів, ніж властивості, які має модель (наприклад, він також може містити аргументи для першого потрібного дочірнього пристрою, у нього можуть бути аргументи необов'язкові тощо).
Однак компілятор генерує CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
на private
конструкторах.
Я можу відключити CS8616 для private
конструкторів, #pragma warning disable CS8618
але не вважаю це гарною ідеєю.
Як у цьому сценарії слід використовувати тип Cul 8 Nullable Reference? Або моя модель нечітка або порушує кращі практики - як це зробити правильно?
На жаль, я знайшов невідповідні документи чи вказівки.