Estou ativando tipos de referência anuláveis do C # 8.0 em um projeto do .NET Core 3.0. O projeto usa o Entity Framework Core 3.0 para acessar o banco de dados.
A seguir, é apresentado um modelo de dados cujo título não deve ser nulo.
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;
}
}
O código próprio deve usar os public
construtores apenas enquanto os private
construtores estiverem lá apenas para permitir que o Entity Framework Core e (potencialmente também) a serialização vinculem valores do banco de dados a essas classes / modelos. O construtor público pode ter estrutura, lista e tipos de argumentos diferentes das propriedades do modelo (por exemplo, também pode conter argumentos para o primeiro filho necessário, pode ter alguns argumentos opcionais etc.).
No entanto, o compilador gera CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
nos private
construtores.
Consigo desativar o CS8616 para os private
construtores, #pragma warning disable CS8618
mas não considero isso uma boa ideia.
Como é suposto usar tipos de referência anuláveis C # 8.0 neste cenário? Ou meu modelo é falso ou viola as melhores práticas - como fazê-lo corretamente?
Infelizmente, não encontrei documentos ou orientações relevantes.
Respostas:
Não há maneira adequada de lidar com propriedades de navegação não anuláveis.
Link da documentação oficial: https://docs.microsoft.com/en-us/ef/core/misc Miscellaneous / nullable - reference - types#non - nullable - properties - and - initialization
fonte
No MS Docs for Entity types com construtores
Talvez valha a pena criar um ctor privado com o parâmetro necessário para essas propriedades e ver se o Framework chamará isso e funcionará?
Desabilitar também avisos não é uma boa ideia, a menos que você esteja 100% confiante de que não há problema em desabilitá-lo.
fonte