Приложение, которое я сейчас создаю, использует хранимые процедуры и созданные вручную модели классов для представления объектов базы данных. Некоторые люди предлагают использовать Entity Framework, и я подумываю перейти на это, так как я не так далеко от проекта. Моя проблема в том, что я чувствую, что люди, выступающие за EF, говорят мне только о хорошем, а не о плохом :)
Мои основные проблемы:
- Мы хотим, чтобы проверка на стороне клиента осуществлялась с использованием DataAnnotations, и, похоже, мне все равно нужно создавать модели на стороне клиента, поэтому я не уверен, что EF сэкономит столько времени на кодирование.
- Мы хотели бы, чтобы классы были как можно меньше при работе по сети, и я прочитал, что использование EF часто включает дополнительные данные, которые не нужны
- У нас есть сложный слой базы данных, который пересекает несколько баз данных, и я не уверен, что EF справится с этим. У нас есть одна общая база данных с такими вещами, как Users, StatusCodes, Types и т. Д., А также несколько экземпляров наших основных баз данных для разных экземпляров приложения. Запросы SELECT могут и будут запрашивать все экземпляры баз данных, однако пользователи могут изменять только те объекты, которые находятся в базе данных, над которой они работают в настоящее время. Они могут переключать базы данных без перезагрузки приложения.
- Объектные режимы очень сложны, и часто требуется довольно много объединений
Аргументы в пользу EF:
- Параллелизм. Мне не нужно кодировать в чеках, чтобы увидеть, обновлялась ли запись перед каждым сохранением
- Генерация кода. EF может генерировать частичные модели классов и POCO для меня, однако я не уверен, что это действительно сэкономило бы мне столько времени, так как я думаю, что нам все еще нужно будет создать клиентские модели для проверки и некоторые пользовательские методы анализа.
- Скорость разработки, поскольку нам не нужно создавать хранимые процедуры CRUD для каждого объекта базы данных.
Наша текущая архитектура состоит из службы WPF, которая обрабатывает вызовы базы данных с помощью параметризованных хранимых процедур, объектов POCO, которые отправляются в / из службы WCF и клиента WPF, и самого клиента рабочего стола WPF, который преобразует POCO в класс Models с целью проверки и DataBinding.
Итак, мой вопрос, подходит ли EF для этого? Есть ли подводные камни в EF, о которых я не знаю?
источник
Ответы:
Недавно я оценивал Entity Framework, и лучшее место, где я нашел проблемы и отсутствующие функции, было: http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions
Пункты с наибольшим количеством голосов:
В списке пользовательских тембров много других проблем.
Кстати, я очень взволнован предстоящим выпуском EF 4.1, который будет включать в себя подход Code-First ... http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4 -1-релиз-кандидат-available.aspx
Это на самом деле может подтолкнуть меня попробовать EF в производственном приложении.
источник
.ToList()
или.ToArray
) до того, как ваши выражения LINQ будут полностью определены. Вот почему он тянет все записи и делает это медленно.Выполнение ветвления на ошибку / функцию с EF может быть чрезвычайно болезненным во время слияния. Представьте, что две ветви A и B вносят изменения в базу данных (что, вероятно, произойдет много на ранних этапах нового проекта).
Вы объединяете все «нормальные» файлы - файлы cs и т. Д. И тогда пора объединить Model.edmx. И вдруг вы не просто объединяете логические отображения между вашей объектной моделью и базой данных, но также и положения таблиц в диаграмме сущностей.
Объединение Model.edmx настолько болезненно, что мы приняли довольно неприятный способ, который работает:
источник
Есть несколько других преимуществ для EF, которые вам не хватает:
Недостатки (особенно если вы используете проверку):
object
типами, так что это просто для чтения метаданных. Еще много лишнего неактивного кода.Это две самые большие жалобы, которые у меня есть. Есть ряд преимуществ, но вы вполне можете получить те же преимущества от NHibernate. Если EntityFramework находится на столе, попросите команду также проверить NHibernate и быстро выяснить плюсы и минусы вашего проекта.
Проблема класса метаданных - это головная боль, но, к счастью, у меня так много сущностей, которым нужны проверочные теги.
Отсутствие действительно независимого режима для ваших объектов ограничивает то, что вы можете делать в веб-среде. Присоединенный режим лучше подходит для настольных приложений, в которых и появился ряд нововведений Microsoft. Отдельный режим возможен , но очень больно. Лучше всего использовать альтернативный инструмент в этом случае.
источник
using(EFConnection conn = new EFConnection)
конструкции. Если вы попытаетесь спрятать этот объект где-нибудь для безопасного хранения, чтобы вы могли выполнить быстрое обновление и снова сохранить его во второмusing(...)
утверждении, вам придется подумать еще раз. См. Msdn.microsoft.com/en-us/library/bb896271.aspx и msdn.microsoft.com/en-us/library/bb896248.aspx . Использование EF 3.5 (которое мне приходилось использовать в последней версии) не совсем чистое.Одна вещь , Microsoft не очень хорошо имеет обратную
сопоставимостьсовместимость, особенно когда речь идет о новых технологияхВ частности, EF1 (.net 3.5) очень отличается от EF4 (.net 4.0) - то же самое может произойти для следующей версии.
Я бы подождал некоторое время и увидел бы, как технология созревает.
В то же время рассмотрите возможность использования nHibernate - он не эквивалентен, но он зрелый и широко используется.
источник
сломать ...
Я мог бы написать 10 страниц страницы. Но, если вы просто пишете какое-то одноразовое приложение для компании X ... кого это волнует. Но если вы разрабатываете программный продукт ... вам придется быть намного более анальным
источник
Проверьте это: http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/
Основными моментами являются:
Обратите внимание, что ссылка выше говорит о EF1.
Также эта ссылка: http://ormeter.net/ показывает, что EF не самый лучший по сравнению с другими ORM по производительности и поддержке LINQ.
источник