Entity Framework + POCO Падения? - PullRequest
1 голос
/ 13 мая 2011

Я слышал, что у POCO есть недостатки, связанные с Entity Framework, но я не уверен на 100% в чем они.Я слышал, что есть проблемы с отслеживанием изменений.Каковы основные недостатки и какие обходные пути?Я изучаю возможности использования объектов POCO в предстоящем проекте и хочу быть полностью готовым.

Спасибо!

1 Ответ

4 голосов
/ 13 мая 2011

Ошибки зависят от типа приложения, которое вы собираетесь написать.POCO великолепны с точки зрения архитектуры, потому что они не вводят зависимость от платформы Entity.Проблемы с отслеживанием изменений можно разделить на два отдельных блока:

  • Отдельные объекты
  • Производительность

Отдельные объекты - это не только проблема POCO.Это глобальная проблема в EF и, возможно, во всей концепции ORM (но другие API, вероятно, имеют лучшие инструменты для решения этой проблемы).Дело в том, что ORM отвечает за постоянные изменения, внесенные в объекты.Для этого он предлагает некоторые механизмы отслеживания изменений, но эти механизмы отслеживания изменений работают, только если ORM знает объект.Когда вы отсоединяете сущность (в случае вызова EF Detach или распоряжения ObjectContext или создания сущности без загрузки ее из базы данных - что часто встречается в веб-приложениях и веб-службах), EF не знает об изменениях, и как только вы хотите сохранитьлицо, вы должны сказать EF, что изменилось.Это легко сделать в случае одной сущности , но это довольно большая проблема в случае целого графа объектов.Это может быть частично решено с помощью STE , но Я не думаю, что STE являются хорошим решением для этой проблемы - они полезны только в некоторых сценариях.

Проблемы производительноститакже связаны с отслеживанием изменений.Существует несколько отчетов, показывающих, что если EF хочет отслеживать изменения в объектах, ему требуется очень много времени для инициализации отслеживания изменений (когда объект загружается из базы данных или когда присоединен к контексту ).Эта проблема важна только в том случае, если вы планируете работать с большими наборами данных.

Все еще существует много успешных проектов, использующих POCO, и большинство проектов, вероятно, никогда не встретят ни одной из этих проблем.

...