Задать вопрос
pinkertem
@pinkertem

Как лучше реализовать валидацию класса, сгенерированного Entity Framework'ом?

Есть БД MS SQL и WPF проект. Для работы с этой БД используется Entity Framework Core. Он сгенерировал для каждой таблицы классы, нас в этом вопросе будет интересовать класс Сотрудник - Employees. При создании нового сотрудника перед сохранением требуется сделать проверку, правильно ли заполнены все поля.

Используется паттерн MVVM и при создании ViewModel, которая является визуальной страницей создания сотрудника, в нее передается новый экземпляр класса Employees (_emp) и экземпляр контекста (_context, чтобы как раз производить сохранение в базу). Через биндинг все поля страницы связаны с этим _emp и сохранение проводится так:

_context.Employees.Add(_emp);
_context.SaveChanges();


Хотелось бы иметь возможность валидировать как-то так:

if (_emp.IsValid())
{
    _context.Employees.Add(_emp);
    _context.SaveChanges();
}


Но не знаю, как лучше. Если править код Employees, то правки сотрутся, если потребуется перегенерировать таблицы EF. Думал еще сделать через методы расширения, но добавлять статические классы как-то не особо хочется, потому что они постоянно будут висеть в памяти. Можно создать отдельные классы для валидации и передавать _emp в метод валидации как аргумент. Но может быть есть какой-нибудь способ все-таки сделать валидацию в самом классе сотрудника и чтоб она не затерлась?
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
pinkertem
@pinkertem Автор вопроса
Удобнее всего это сделать через partial класс.

Все классы, создаваемые EF, уже являются partial, т.е. можно создать еще один класс с таким же именем, тоже объявить его partial и дописать в него требуемую функциональность. После компиляции partial классы сольются в один. Важно: partial классы должны лежать в одном неймспейсе.

В моем случае EF классы лежат в папке Model/Entities. Я создал папку Model/EntitiesExt и в ней создал partial класс Employees. Переименовал вручную при этом неймспейс Model.EntitiesExt в Model.Entities. Таким образом оба класса оказались в одном неймспейсе, хотя и в разных папках. Дописал в свой Employees метод IsValid и, собственно, на этом все. Если вдруг перегенерировать EF классы, то мой класс останется нетронутым.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
У вас ложное убеждение, что "статические классы как-то не особо хочется, потому что они постоянно будут висеть в памяти."
Если у вас класс с Extensions не будет содержать статических членов класса, то в памяти ничего не будет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы