Есть ли принципиальная разница между генерацией кода «По умолчанию» и «Устаревший ObjectContext»?

У меня есть модель данных Entity, изначально построенная с использованием ef4, которая используется для моего приложения. Это приложение широко использует студию C1 для Entity Framewaork и поэтому требует использования ObjectContext, а не DBContext (по крайней мере, на данный момент).

Эта модель изначально была создана в Visual Studio 2010 (где создание контекста объекта было по умолчанию), а затем перенесена в Visual Studio 2012 и EF5.0 (после того, как было решено, как создавать (и поддерживать модель контекста объекта по умолчанию). ).

Я начал рассматривать перенос этого приложения на Visual Studio 2013 (но пока сохраняя использование EF5.0), который по умолчанию основывает модели данных сущностей на dbContext. В галерее визуальной студии доступен генератор объектов сущностей EF5.0, который позволяет создавать (или, предположительно, также обновлять) модель данных сущностей, используя в качестве стратегии генерации кода «Унаследованный ObjectContext».

Поэтому, сделав полную резервную копию приложения, я без проблем перенес его на версию 2013, пока не обновил модель из базы данных (добавив несколько новых sproc, которые я хотел использовать). В этот момент я начал получать целую строку ошибок сборки в модели. Однако я мог бы открыть модель данных сам по себе в VS 2012, обновить ее и собрать, а затем снова открыть все приложение в vs2013 без каких-либо проблем и снова собрать все приложение без проблем.

Поэтому мой вопрос заключается в том, действительно ли существует фундаментальная разница между тем, как две версии Visual Studio создают модель данных объекта на основе objectContext, или есть ли один аспект генератора Legacy ObjectContext, который я пропустил при правильной настройке.

Буду рад любым предложениям или замечаниям. КАК я сказал в начале, избегание ObjectContext в настоящее время невозможно. Я ожидаю, что это изменится в недалеком будущем, но пока это невозможно. Если это означает не забыть внести коррективы в модель по сравнению с 2012 годом, пусть будет так. Мне просто любопытно в настоящее время.


person Dom Sinclair    schedule 10.02.2014    source источник


Ответы (1)


Параметр «По умолчанию» был переименован в «Устаревший ObjectContext» в инструментах EF6, поставляемых с VS2013 (и внеполосных инструментах EF6 для VS2012). Причина этого заключалась в том, что даже в VS2012 параметр «По умолчанию» больше не использовался по умолчанию, поскольку параметр «Нет» был по умолчанию, что было довольно забавно.

Чтобы уточнить в VS2010 и VS2012, стратегия генерации кода «по умолчанию» использовала встроенные генераторы кода и генерировала контекст ObjectContext и сущности на основе EntityObject. Параметр «Нет» вообще не будет генерировать код, чтобы позволить шаблонам T4, добавленным в проект, генерировать код. В VS2012 параметр «Нет» используется по умолчанию, и EF Designer добавит в ваш проект шаблоны T4 (файлы .tt), которые будут генерировать контекст на основе DbContext и объекты POCO.

В инструментальных средствах EF6 (т. е. VS2013 и внеполосная версия для VS2012) параметр «По умолчанию» был переименован в «Контекст устаревшего объекта», а параметр «Нет» был переименован в «T4». При создании моделей EF6 «Контекст устаревшего объекта» отключен, потому что сгенерированный код будет недействительным.

Если вам все еще нужен/хотите иметь контекст на основе ObjectContext, для этого можно загрузить шаблоны T4 в галерее Visual Studio. Наконец, если у вас есть ошибки после переключения стратегии генерации кода на контекст объекта по умолчанию/устаревший, обязательно удалите шаблоны T4 для файла edmx. В противном случае вы получите повторяющийся набор сущностей и контекста (один создан из T4, а другой из генератора кода), которые будут конфликтовать. Вы можете найти более подробную информацию об этом в сообщение в блоге, которое я написал некоторое время назад.

person Pawel    schedule 11.02.2014
comment
@Pavel У тебя сломана клавиша Enter? - person Jowen; 30.10.2014
comment
@Jowen - не уверен, о чем ты спрашиваешь. Если вы имеете в виду форматирование, вы можете отредактировать ответ. - person Pawel; 30.10.2014