Я использую Entity Framework O / R mapper от Microsoft и использую классы сущностей (сгенерированные классы, которые сопоставляются с объектами БД) в качестве бизнес-объектов. Это нормально? Укажите свои плюсы и минусы. Что делать в случае связи WCF между бизнес-уровнем и представлением, как отправлять эти объекты в качестве членов данных?





Платформа Entity была разработана для использования объектов сущностей в качестве бизнес-объектов, но вы должны помнить, что бизнес-объекты будут привязаны к технологии O / R, а также к модели EDM. В EF 1.0 не было поддержки сценариев настойчивость-невежество, но поддержка была добавлена в 4.0. Вы можете реализовать интерфейсы, если не хотите использовать какой-либо из их базовых классов.
Начиная с .NET 3.5 SP1, они также должны использоваться как типы параметров и возвращаемые типы в методах службы WCF без какого-либо дополнительного кода.
Я использую EF таким образом, и одна приятная особенность заключается в том, что сгенерированные сущности являются частичными классами, что позволяет их расширять способом, который надежно защищен от проблем с регенерацией.
Также обратите внимание на эта ссылка на MSDN, в котором описаны некоторые распространенные сценарии использования EF в отношении бизнес-логики.
+1: Я тоже так делаю, и пока не нашел случая, в котором я застрял. Я показываю свои свойства класса сущности на диаграммах, списках и на этикетках в приложении winform.
По моему опыту, мы использовали объекты EF на бизнес-уровне нашего приложения, но когда мы выполняем переход на уровень представления через наш уровень службы WCF, мы будем создавать объекты представления из объектов EF.
В нашем случае на уровень представления передается только представление. Мы делаем это, чтобы контролировать представление данных и применять защитную проверку для данных, поступающих из уровня представления.
В случае использования объектов EF в транзакции WCF вы потеряете контекст объекта, с которым был связан объект EF. В CodePlex есть некоторые усилия, которые пытаются помочь с этим, но я не успеваю за ними.
Разве нельзя просто повторно прикрепить объекты, если они теряют свой исходный контекст объекта? Однако вам придется решать проблемы параллелизма самостоятельно.
Я бы не рекомендовал использовать объекты EF в качестве объектов DataContract для WCF, так как вы очень сильно привяжете свою реализацию объектов сущностей к клиентам веб-служб, и в будущем будет сложно вносить изменения, тем сложнее, чем больше клиентов вы планируете иметь.
Я столкнулся с двумя ограничениями, с которыми я столкнулся:
Унаследованные объекты не могут иметь свойства навигации - т.е. если у вас есть класс «человек», а затем «заказчик» и «поставщик», эти покупатель и поставщики не могут иметь свойства навигации.
Методы и вычисляемые поля (что-либо в частичных классах) не передаются через службы данных ADO.Net - если вы также используете службы данных ADO.Net, все, что вы расширяете объекты Entity Framework в частичных классах, не будет передаваться через ADO.Net Службы данных.
Как правило, это не элементы-ограничители (для свойств навигации мы пока просто не используем наследование в структуре сущностей), но они могут вас заинтересовать. Я надеюсь, что в будущем выпуске будут доступны оба эти элемента.
Пример приложения BookLibrary для Платформа приложений WPF (WAF) показывает, как можно использовать шаблон Model-View-ViewModel (MVVM) в сочетании с Entity Framework.
Обновление: в Entity Framework 4.0 / .NET 4.0 поддерживается постоянное игнорирование.