Нет ничего плохого в использовании классов, сгенерированных EF. Вот для чего они здесь.
Но если вы неправильно примените технологию, у вас много проблем. Например, многие новички будут пытаться использовать эти сгенерированные EF классы для всего . Они возьмут классы, проведут их через границу AppDomain с помощью WCF или Remoting, и, возможно, они свяжутся с ними на своих интерфейсах. Это может сработать для быстрого и грязного приложения, основанного на CRUD, но оно не сработает ни с чем с реальным размером.
Почему бы и нет? Потому что сгенерированные EF классы моделируются в «домене» данных вашего приложения, а не в «домене» представления. То, с чем пользователь может захотеть взаимодействовать, часто не является объектом 1: 1 с таблицей в вашей базе данных. Например, пользователь может иметь сетку «Продукты». Внутри этой сетки будет указана общая сумма долларов, проданных за продукт, а также некоторые ориентировочные данные о продукте. Хотя ориентировочные данные (имя, размер и т. Д.), Вероятно, будут получены сразу из таблицы Product и, следовательно, сгенерированного класса Product из EF, агрегированные данные (общее количество проданных долларов) являются агрегированным значением.
Что мы обычно делаем, это используем в нашем сервисе сгенерированные EF классы, а затем используем сервис для преобразования классов EF в ViewModels, которые мы затем привязываем к нашим интерфейсам с помощью WPF (или любой другой вашей любимой технологии). Это дает нам разделение проблем, которые мы ищем.