Запутался в генераторах для Entity Framework 4.1 - PullRequest
5 голосов
/ 11 октября 2011

Я оцениваю Entity Framework для проекта по устаревшей базе данных. База данных довольно хорошо спроектирована, и уже было решено, что мы будем использовать подход Database-First. Приложение будет основано на WinForms, но я хотел бы запланировать заранее и принять во внимание ASP.Net, а также, вероятно, в какой-то момент оно будет запрошено руководством, и я хотел бы повторно использовать DAL.

Теперь я понимаю, что Entity Framework предоставляет несколько способов создания объектов сущностей:

  • Объекты, полученные из EntityObject
  • POCO (ObjectContext)
  • POCO (DbContext)
  • Самопроверка объектов (STE)

Я пытался сравнить три подхода и до сих пор узнал об этом.

Шаблон EntityObject T4 - самый богатый из всех. Например, он помещает комментарии из модели сущности в комментарии XMLDoc поверх каждого класса и каждого свойства сущности, что довольно удобно и полезно с точки зрения удобства сопровождения кода. Ни один из других генераторов не поддерживает это из коробки (хотя я понимаю, что возможно изменить шаблоны T4, но это, очевидно, требует некоторой работы). С другой стороны, API DbContext несколько лучше.

Производные типы EntityObject предоставляют событие, к которому можно подключиться при изменении свойства объекта, что полезно для реализации бизнес-логики.

Я понимаю, что POCO более естественен для этого, но генератор T4 будет перезаписывать все мои изменения при каждом изменении модели. Конечно, сгенерированные POCO являются частичными классами, но, насколько мне известно, невозможно переопределить свойство, уже определенное в частичном классе, поэтому я не уверен, как осуществляется реализация в них бизнес-логики?

Многие люди, похоже, ненавидят производные классы EntityObject, предпочитая POCO-подход, но, похоже, я теряю много полезных функций, которые предоставляются EntityObjects из коробки, переходя к POCO маршрут. Принимая во внимание общее сильное предпочтение объектов POCO, возможно, я что-то неправильно понимаю, поэтому мой вопрос.

И последнее, какой генератор лучше всего подходит в среде ASP.Net? Я беспокоюсь о том, что изменения в моих сущностях перестают отслеживаться? Являются ли Само-отслеживающиеся сущности более полезными в этом случае или они имеют ценность только для веб-сервисов (которые я, скорее всего, не буду использовать)?

Большое спасибо заранее.

1 Ответ

7 голосов
/ 11 октября 2011

Если вы хотите использовать EF 4.1, вы можете выбрать только DbContext Generator. Все остальные генераторы (POCO, EntityObject и STE) предназначены для API-интерфейса ObejctContext (EF 4.0). Я описал различия между генераторами здесь .

В вашем случае генератор EntityObject можно использовать для WinForms, но он будет громоздким для решения ASP.NET, где POCO лучше, потому что приложение ASP.NET является отсоединенным сценарием - вам все равно придется иметь дело с отслеживанием изменений в ASP.NET.

Цель STE описана здесь , но они не очень полезны в WinForm, где вы можете использовать присоединенные сущности напрямую или в ASP.NET, где он требует хранить их между запросами в просмотр состояния.

Любая бизнес-логика, которую вы хотите поместить в сущность, должна быть закодирована в генераторе T4, иначе она будет перезаписываться после каждого поколения. Любая упомянутая вами особенность генератора на основе EntityObject может быть реализована и в генераторе POCO / DbContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...