Как EF4 сравнивается с NHibernate? - PullRequest
6 голосов
/ 31 января 2011

Что лучше?Я слышал расширение CodeFirst, но оно готово к прайм-тайм.Пожалуйста, поделитесь своим опытом с разработкой, любые потери производительности и т. Д.

Ответы [ 2 ]

6 голосов
/ 31 января 2011

Я думаю, что это своевременный вопрос, так как мне было интересно то же самое.Я пытаюсь создать серьезную модель электронной коммерции и стараюсь, чтобы мои POCO были свободны от постоянных проблем, а также стараюсь оставаться верным доменному дизайну.Пока что я очень осторожен, и я стою на пороге того, должен ли я прыгнуть с корабля в NHibernate.Единственное, что удерживает меня от этого, - это то, что я предполагаю, что Microsoft улучшится (и быстро).

Некоторые из самых больших проблем на данный момент:

  • Невозможность точно контролировать материализацию объектов,EF вызывает конструктор с нулевым аргументом в вашем POCO, и это поведение, которое вы не можете изменить.
  • Нет поддержки enum.Сообщество кричит - кричит!- для этого и этого не произошло.Обходные пути ужасны и загрязняют модель вашего домена.
  • Странные ошибки отображения при попытке контролировать имена столбцов и отношения в базе данных.Основные из них, которые я могу придумать, - это составные ключи и отношения «многие ко многим».Их можно обойти, и я предполагаю, что они будут исправлены ко времени выпуска, но, тем не менее, они разочаровывают.
  • Плохой SQL.Я также выполняю работу администратора баз данных, и SQL, который генерирует EF (с или без Code-First), ужасен.

И это только вершина айсберга: я только начинаю изучать EF4 иЯ сталкиваюсь с ужасными препятствиями.Поскольку я думаю о других причинах, я добавлю их здесь.Я все еще переживаю это.

(Интересно, даст ли сообщество еще один голос "без доверия")


Подробнее:

  • Чтобы добавить к проблеме «странных ошибок отображения»: вы не можете управлять именем столбца, если он участвует в отношениях со ссылками на себя (например, если у вас есть иерархия).Я предполагаю, что это будет исправлено в окончательном выпуске.
  • Отсутствие пакетной обработки, что приводит к многократным обращениям к базе данных.Например, как вы удаляете кучу предметов из коллекции? Загружать все сущности в память и удалять их по одному. Меньший захват - это количество обращений к БД при вставке в таблицы, участвующие в отношениях наследования.
  • Нет интеллектуального способа решенияс изменениями модели.EF Code-First любит полностью отбрасывать всю вашу базу данных, если ей нужно изменить схему.
  • Несколько точек расширяемости.Вы можете буквально посчитать с одной стороны количество событий, на которые EF4 позволяет вам подписаться (а Code-First не предоставляет намного больше).
0 голосов
/ 02 февраля 2011

Что касается меня, я предпочитаю EF, но с некоторыми улучшениями.В основном EF предлагает вам следующие преимущества:

  • Визуальный редактор моделей
  • Мастер обновления базы данных / модели (вместо ручных изменений XML - что для меня ужасно)

Также я использую коммерческие инструменты сторонних производителей на основе EF и L2S ( LinqConnect ), которые предоставляют мне следующие функции:

...