Каковы различия и сходства POCO, отслеживаемых объектов и объектов EntityObjects - PullRequest
1 голос
/ 06 января 2011

Хотя у меня есть некоторые понятия .net o / rm, я запутался в трех терминах на языке EF4: отслеживаемые объекты, объекты EntityObject и POCO.

1) Не могли бы вы указать их различия?1004 * 2) Не могли бы вы указать их сходство?

3) Когда их следует использовать?

4) Когда их не следует использовать?

5) Возможно ли это?смешивать их комбинации в проекте? (т. е. предположим, что у вас уже написано много кода для управления объектами EntityObject, легко ли реализовать POCO?)

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Позвольте мне попробовать:

  • EntityObject - базовый класс Entity Framework; по умолчанию, когда вы создаете новую модель Entity Framework, это класс, от которого будут наследоваться все классы, представляющие ваши таблицы. Он содержит всю логику и код, необходимый для выполнения всей магии EF.

  • POCO - это простые старые объекты CLR - просто ваши простые объекты, без зависимости от EF, просто простые классы

  • Отслеживаемые объекты - это в основном "POCO на стереоидах" - классы POCO, которые имеют дополнительные функции для отслеживания своего состояния (неизмененные, измененные и т. Д.), Поэтому их можно отправлять по нескольким уровням (и обратно). ) и использоваться почти как обычные EntityObjects в конце

Самым простым в использовании является потомок EntityObject - вы просто используете их, все отлично и работает. Однако: выполнение этого тесно связано с Entity Framework, и это может быть архитектурной проблемой.

Использование только POCO является "самым чистым" - вы имеете дело только с простыми классами, а EF делает всю свою магию "за кулисами" - но требуется немного дополнительного кода и усилий, чтобы это работало нормально.

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

Поэтому я бы порекомендовал:

  • начните с обычной модели данных Entity Framework, визуального дизайнера и всего остального, используйте потомков EntityObject и просто начните использовать EF и как это работает

  • , если вы чувствуете необходимость, изучите POCO или STE (сущности с самообследованием) более подробно, если у вас есть базовое понимание EF

0 голосов
/ 29 октября 2014

Вот некоторая дополнительная информация о различиях между EntityObject, Trackable Entities и POCO.

1) EntityObject - это базовый класс сущностей, используемый для устаревших приложений EF.Вы должны избегать этого любой ценой, поскольку он тесно связывает ваши сущности с EF, что является плохой вещью.А с поддержкой EF POCO это совершенно не нужно, потому что EF теперь предоставляет многие из тех же функций без базового класса.

2) Классы POCO не знают о проблемах постоянства.Они не должны быть производными от базового класса или иметь специальные атрибуты.Они обеспечивают независимость от API доступа к данным, например EF.

3) Отслеживаемые объекты - это тип классов POCO, которые имеют одно или два дополнительных свойства для установки состояния объекта: Не изменяется,Добавлено, Изменено, Удалено.Хотя эти свойства относятся к персистентности в целом, они не связывают сущности с какой-либо конкретной средой персистентности, включая отслеживаемые сущности.Скорее, они позволяют некоторой персистентной платформе на внутреннем сервере интерпретировать и применять эти свойства, которые являются чрезвычайно легкими и независимыми от каркаса.

Основное преимущество отслеживаемых объектов, которое является заменой ныне не существующей Microsoft Самостоятельное отслеживание сущностей заключается в том, что оно позволяет сохранять изменения в графике связанных объектов в одной транзакции с помощью одного обращения к службе WCF или веб-API.Например, если у вас есть Заказ с несколькими деталями, некоторые из которых добавлены, изменены или удалены, Заказ и детали могут быть отправлены за один раз, и все обновления происходят атомарно.

Отслеживаемые объекты имеютдругие преимущества, особенно с точки зрения производительности.Он реализован в виде набора пакетов NuGet и расширений Visual Studio (2012, 2013), которые позволяют за короткое время собрать решение N-уровня.

Cheers, Тони

...