Sto abilitando i tipi di riferimento Nullable di C # 8.0 su un progetto .NET Core 3.0. Il progetto utilizza Entity Framework Core 3.0 per accedere al database.
Di seguito è riportato un modello di dati il cui titolo non deve essere nullo.
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;
}
}
Il codice proprio dovrebbe usare i public
costruttori solo mentre i private
costruttori sono lì solo per consentire a Entity Framework Core e (potenzialmente anche) alla serializzazione di associare i valori dal database a queste classi / modelli. Il costruttore pubblico potrebbe avere struttura, elenco e tipi di argomenti diversi rispetto alle proprietà del modello (ad esempio, potrebbe contenere anche argomenti per il primo figlio richiesto, potrebbe avere alcuni argomenti facoltativi ecc.).
Tuttavia, il compilatore genera CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
sui private
costruttori.
Sono in grado di disabilitare CS8616 per i private
costruttori #pragma warning disable CS8618
ma non lo considero una buona idea.
Come dovrebbe usare i tipi di riferimento nullable di C # 8.0 in questo scenario? O il mio modello è falso o viola le migliori pratiche - come farlo correttamente?
Sfortunatamente, ho trovato documenti o indicazioni non pertinenti.