Сравните объекты Entity Framework 4 с объектами ADO.NET C # POCO Entity Generator. - PullRequest
0 голосов
/ 30 марта 2011

У меня действительно есть два вопроса:

  1. В чем разница между объектом Entity Framework Entity и объектом ADO.NET C # POCO.
  2. Нужно ли обновлять запись с использованием правильного репозитория?

Если вы выключите генерацию кода, а затем добавите ADO.NET C # POCO Entity Generator , он обеспечит хорошее представление класса ваших объектов Entity Framework 4. Идея в том, что ( отсюда ):

The POCO Template can be used to generate persistence ignorant entity types 
from an Entity Data Model.

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

Так что мой вопрос в том, что отличается между собственным объектом Entity Framework и этими POCO, сгенерированными с помощью этого инструмента?

Это то, что я думаю, когда обновляю запись с помощью репозитория. Это неправильно?

  1. Запрос POCO из хранилища.
  2. Репозиторий загружает записи из контекста данных, создает новый POCO для каждой найденной записи, копирует значения из объектов Entity Framework в POCO и возвращает коллекцию новых POCO.
  3. Изменения вносятся в эти POCO вне хранилища, затем POCO отправляются обратно в хранилище с использованием чего-то вроде Save (POCO).
  4. Репозиторий загружает соответствующие записи из базы данных и копирует свойства POCO в объекты Entity Framework.
  5. Один вызов Сохранить, используя либо объект хранилища, либо единицу измерения рабочего объекта.

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

В случае генератора POCO сгенерированные классы сущностей (например, Employee, Company и т. Д.) Не являются производными от какого-либо специального класса (следовательно, называется Plain Old). Принимая во внимание, что в случае генератора entityobject классы сущностей наследуются от специального класса EntityObject, который обеспечивает определенные возможности.

Цель наличия классов POCO - устранить специфические для БД проблемы организации. Таким образом, наша модель домена не знает операций с БД / постоянством.

1 голос
/ 30 марта 2011

POCO означает, что у вас есть простой старый класс CLR, который не загрязнен специальными конструкциями, связанными с персистентностью.Объекты сущности являются производными от класса EntityObject и используют множество классов и атрибутов, непосредственно связанных с структурой сущностей.При использовании EntityObjects вы делаете свой код полностью зависимым от структуры сущностей.

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

...