Каковы существенные различия между различными элементами генерации кода для модели EDMX? - PullRequest
10 голосов
/ 20 августа 2011

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

Кажется, POCO изолирует структуры данных объекта от объекта, который перемещает их в / изхранилище данных.

Я не уверен, что такое «Самообследуемый объект».Я предполагаю, что часть отслеживания относится к реализации так называемой модели «единицы работы», но я не позитивен.И еще больше царапин, я думаю, мне интересно "сам отслеживание в отличие от чего?".

enter image description here

1 Ответ

13 голосов
/ 20 августа 2011

Генератор POCO

POCO означает простой старый объект C # (или CLR).POCO не зависят от EF.Это просто классы, следующие некоторым правилам, но вы можете наследовать их от своего собственного типа, если хотите.Они также не содержат постоянных данных.

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

Генератор EntityObject

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

Этот тип объектов был единственным типом, поддерживаемым в первой версии EF.Даже все используют POCO для достижения лучшего разделения, этот тип является родным для EF и, вероятно, предлагает большинство функций.

Этот генератор также делает ваши объекты сериализуемыми (с DataContractSerializer).

Самостоятельно отслеживаемые объекты (STE) Генератор

Это очень особый тип генератора POCO.При работе с EF мы различаем два сценария.Прикрепленный сценарий, в котором EF отслеживает изменения, внесенные в сущность, и отдельный сценарий, в котором вы внесли изменения вне области действия EF, и после того, как вы прикрепили объект к EF, вы должны сообщить ему, какие изменения вы сделали.Типичные отдельные сценарии - это веб-службы, в которых вы передаете сущности клиенту, и как только клиент передает их обратно, вы должны каким-то образом синхронизировать изменения, чтобы EF знал, какие команды SQL он должен сгенерировать. STE для этих отдельных сценариев .Они являются реализацией шаблона набора изменений = они отслеживают свое текущее состояние, а также изменения, сделанные с момента запуска самотрекинга (как это делал старый DataSet).

Это теория.В реальном мире STE имеют некоторые большие недостатки и подходят только для очень специфических сценариев.

Редактировать:

Есть еще один генератор, которыйустанавливается вместе с Entity Framework 4.1.

Генератор DbContext

Этот генератор ведет к тем же объектам, что и генератор POCO.Единственное отличие заключается в использовании API.Генератор POCO использует API-интерфейс ObjectContext, тогда как генератор DbContext использует POCO с API-интерфейсом DbContext (доступно только в EF 4.1 и CTP за июнь 2011 года).Разница между этими API составляет вопрос выбора .

...