Entity Framework v4 - в чем разница между POCO и Code-Only?
-
06-07-2019 - |
Вопрос
у меня сложилось впечатление, что
- EF с POCO:позволяет вам сопоставлять ваши собственные POCO с объектами в модели (.edmx).
- Только для кода EF: НЕТ edmx / конструктор моделей (ie.Метаданные CSDL/SSDL/MSL (совместно используемые EDMX)).Все еще POCO, но сопоставления, отношения, навигация и т.д. - Это все вручную закодированный (отсюда и описание, содержащее только код).
Если это описание двух концепций (более или менее) правильное, зачем кому-то делать только код вместо EF с POCO?
Оба выполняют POCO, но на 2-м лежит дополнительное бремя необходимости также выполнять сопоставление вручную?
Решение
- Код хорош только в том случае, если вы хотите написать сопоставление вручную без необходимости копаться в XML.Кроме того, edmx designer становится громоздким после примерно 50 моделей, его использование таким образом становится просто обременительным.
Когда что-то идет не так внутри вашего mapping XML, действительно непросто покопаться в xml, чтобы внести необходимые исправления.Также конструктор прерывается, если вы начинаете вручную редактировать свой xml в определенных сценариях.
Сейчас я не знаю подробностей, но дизайнер в EF1 не поддерживал все доступные параметры отображения.В конструкторе EF4 есть некоторые улучшения (на ум приходят односторонние взаимосвязи ), но я не уверен, что у него есть соответствие функций с ручными сопоставлениями.
- ДА.
Другие советы
Единственное, что я бы добавил к ответу jfar, это то, что с помощью Code-Only вы не иметь для создания сопоставлений.
Сопоставления в большинстве случаев могут быть выведены условно.
Точка зрения о предварительной генерации представления важна.Я не слышал, чтобы Microsoft намеревалась предоставлять предварительную генерацию только для кода.Если кто-то знает другое, пожалуйста, напишите.
Я использовал код только для 400 таблиц в рамках исследования того, использовать ли EF4 или NHibernate, и существует начальная задержка в 80 секунд для генерации представления - точно такая же, как при использовании конструктора, но с помощью designer view возможна предварительная генерация, которая сократила задержку до 10 секунд.Если вас не устраивает разделение вашей модели и у вас более 75 таблиц, не используйте только код.
Я не думаю, что в настоящее время Code-Only позволяет вам предварительно генерировать представления, так что это может привести к снижению производительности.Однако это может измениться перед выпуском.
Что-то еще, что не было упомянуто, так это то, что вы получаете полную проверку вашего синтаксиса во время компиляции при использовании только кода.Если вы используете визуальный конструктор с EDMX, вы получаете некоторую проверку во время компиляции, но она ограничена.Для больших моделей EDMX становится крайне неудобным, и ручное написание CSDL, SSDL и MSL - единственный достойный способ управлять чрезвычайно большими моделями с помощью XML-сопоставлений.Вы не получаете никакой проверки во время компиляции, если вручную управляете своими сопоставлениями.
Используя только код, у вас есть преимущество полной проверки во время компиляции моделей любого размера, даже если у вас есть сотни или тысячи объектов, с которыми вам нужно работать.Это также приводит к меньшему "беспорядку", поскольку ваш конечный продукт представляет собой все скомпилированные сборки, а не смесь сборок и различных типов XML-файлов.