J'active les types de référence Nullable C # 8.0 sur un projet .NET Core 3.0. Le projet utilise Entity Framework Core 3.0 pour accéder à la base de données.
Voici un modèle de données dont le titre ne doit pas être nul.
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;
}
}
Le propre code est censé utiliser les public
constructeurs uniquement tandis que les private
constructeurs sont là juste pour permettre à Entity Framework Core et (éventuellement aussi) à la sérialisation de lier les valeurs de la base de données à ces classes / modèles. Le constructeur public peut avoir une structure, une liste et des types d'arguments différents de ceux des propriétés du modèle (par exemple, il peut également contenir des arguments pour le premier enfant requis, certains arguments peuvent être facultatifs, etc.).
Cependant, le compilateur génère CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
sur les private
constructeurs.
Je peux désactiver CS8616 pour les private
constructeurs par #pragma warning disable CS8618
mais je ne considère pas cela comme une bonne idée.
Comment est-il censé utiliser les types de référence Nullable C # 8.0 dans ce scénario? Ou mon modèle est-il faux ou viole-t-il les meilleures pratiques - comment le faire correctement?
Malheureusement, j'ai trouvé des documents ou des conseils non pertinents.
Réponses:
Il n'existe aucun moyen approprié de gérer les propriétés de navigation non nullables.
Lien vers la documentation officielle: https://docs.microsoft.com/en-us/ef/core/miscivers/nullable-reference-types#non-nullable-properties-and-initialization
la source
À partir de MS Docs pour les types d'entité avec des constructeurs
Peut-être qu'il vaut la peine de créer un ctor privé avec le paramètre nécessaire pour ces propriétés et de voir si le Framework appellera alors cela et fonctionnera?
De plus, la désactivation des avertissements n'est pas une bonne idée, sauf si vous êtes entièrement sûr à 100% qu'il est correct de le désactiver.
la source