Как лучше реализовать валидацию класса, сгенерированного 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 в метод валидации как аргумент. Но может быть есть какой-нибудь способ все-таки сделать валидацию в самом классе сотрудника и чтоб она не затерлась? 

 Удобнее всего это сделать через partial класс.  

  

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

  

В моем случае EF классы лежат в папке Model/Entities. Я создал папку Model/EntitiesExt и в ней создал partial класс Employees. Переименовал вручную при этом неймспейс Model.EntitiesExt в Model.Entities. Таким образом оба класса оказались в одном неймспейсе, хотя и в разных папках. Дописал в свой Employees метод IsValid и, собственно, на этом все. Если вдруг перегенерировать EF классы, то мой класс останется нетронутым. 

 У вас ложное убеждение, что "статические классы как-то не особо хочется, потому что они постоянно будут висеть в памяти."  

Если у вас класс с Extensions не будет содержать статических членов класса, то в памяти ничего не будет.