Я оцениваю 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? Я беспокоюсь о том, что изменения в моих сущностях перестают отслеживаться? Являются ли Само-отслеживающиеся сущности более полезными в этом случае или они имеют ценность только для веб-сервисов (которые я, скорее всего, не буду использовать)?
Большое спасибо заранее.