Я думаю, что это своевременный вопрос, так как мне было интересно то же самое.Я пытаюсь создать серьезную модель электронной коммерции и стараюсь, чтобы мои POCO были свободны от постоянных проблем, а также стараюсь оставаться верным доменному дизайну.Пока что я очень осторожен, и я стою на пороге того, должен ли я прыгнуть с корабля в NHibernate.Единственное, что удерживает меня от этого, - это то, что я предполагаю, что Microsoft улучшится (и быстро).
Некоторые из самых больших проблем на данный момент:
- Невозможность точно контролировать материализацию объектов,EF вызывает конструктор с нулевым аргументом в вашем POCO, и это поведение, которое вы не можете изменить.
- Нет поддержки enum.Сообщество кричит - кричит!- для этого и этого не произошло.Обходные пути ужасны и загрязняют модель вашего домена.
- Странные ошибки отображения при попытке контролировать имена столбцов и отношения в базе данных.Основные из них, которые я могу придумать, - это составные ключи и отношения «многие ко многим».Их можно обойти, и я предполагаю, что они будут исправлены ко времени выпуска, но, тем не менее, они разочаровывают.
- Плохой SQL.Я также выполняю работу администратора баз данных, и SQL, который генерирует EF (с или без Code-First), ужасен.
И это только вершина айсберга: я только начинаю изучать EF4 иЯ сталкиваюсь с ужасными препятствиями.Поскольку я думаю о других причинах, я добавлю их здесь.Я все еще переживаю это.
(Интересно, даст ли сообщество еще один голос "без доверия")
Подробнее:
- Чтобы добавить к проблеме «странных ошибок отображения»: вы не можете управлять именем столбца, если он участвует в отношениях со ссылками на себя (например, если у вас есть иерархия).Я предполагаю, что это будет исправлено в окончательном выпуске.
- Отсутствие пакетной обработки, что приводит к многократным обращениям к базе данных.Например, как вы удаляете кучу предметов из коллекции? Загружать все сущности в память и удалять их по одному. Меньший захват - это количество обращений к БД при вставке в таблицы, участвующие в отношениях наследования.
- Нет интеллектуального способа решенияс изменениями модели.EF Code-First любит полностью отбрасывать всю вашу базу данных, если ей нужно изменить схему.
- Несколько точек расширяемости.Вы можете буквально посчитать с одной стороны количество событий, на которые EF4 позволяет вам подписаться (а Code-First не предоставляет намного больше).