Saya mengaktifkan C # 8.0 Jenis Referensi Nullable pada proyek .NET Core 3.0. Proyek ini menggunakan Entity Framework Core 3.0 untuk mengakses database.
Berikut ini adalah model data yang Judulnya tidak boleh nol.
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;
}
}
Kode sendiri seharusnya hanya menggunakan public
konstruktor sementara private
konstruktor ada hanya untuk memungkinkan Entity Framework Core dan (berpotensi juga) serialisasi untuk mengikat nilai dari database ke kelas / model ini. Konstruktor publik mungkin memiliki struktur, daftar, dan jenis argumen yang berbeda dari properti yang dimiliki model (misalnya, mungkin juga berisi argumen untuk anak pertama yang diperlukan, mungkin memiliki beberapa argumen opsional, dll.).
Namun, kompiler menghasilkan CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
pada private
konstruktor.
Saya dapat menonaktifkan CS8616 untuk private
konstruktor dengan #pragma warning disable CS8618
tetapi saya tidak menganggap itu sebagai ide yang bagus.
Bagaimana seharusnya menggunakan C # 8.0 Jenis Referensi Nullable dalam skenario ini? Atau apakah model saya palsu atau melanggar praktik terbaik - bagaimana melakukannya dengan benar?
Sayangnya, saya tidak menemukan dokumen atau panduan yang relevan.