Я пытаюсь использовать в своем проекте C# 8 недействительных ссылочных типов и заставить его плавно работать с EF Core.
Следуя этому руководству , я заставил свои классы сущностей иметь Конструкторы принимают все данные, необходимые для инициализации их ненулевых свойств:
public class MyEntity
{
public MyEntity(int someNumber, string name, string shortName, bool active)
{
SomeNumber= someNumber;
Name = name;
ShortName = shortName;
Active = active;
}
public int SomeNumber { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public string? SomethingOptional { get; set; }
public bool Active { get; set; }
}
В моем бизнес-случае мне иногда нужно обновить все свойства объекта. Я могу использовать установщики свойств, но поскольку я хочу убедиться, что я ничего не пропускаю, удвоив синтаксис инициализации (и в действительности мои сущности могут иметь 10 или более свойств), я решил создать publi c Update () Функция для удобства и вызывает ее вместо тела конструктора:
public MyEntity(int someId, string name, string shortName, bool active)
{
Update(someId, name, shortName, active);
}
public void Update(int someId, string name, string shortName, bool active)
{
SomeNumber = someId;
Name = name;
ShortName = shortName;
Active = active;
}
Теперь, при создании сущности, я вызываю конструктор, а при его изменении я вызываю Update (). Однако теперь компилятор выдает предупреждение об обнуляемости (CS8618), что не обнуляемые свойства не инициализируются конструктором . Очевидно, невозможно предположить, что вызов Update будет их инициализировать.
Возможно, я немного переоценил это с помощью этого метода Update (), но теперь мне интересно, есть ли способ сделать компилятор поверьте, что мой конструктор будет инициализировать свойства ?