Подтвердить что ты не робот

Как остановить Entity Framework от создания BOTH ObjectContext и dbContext

Фон

  • Visual Studio 2012
  • НОВЫЙ файл Model.EDMX, созданный в VS2012
  • Скопировал часть EDMX xml из ранее созданного EDMX в новый

Проблема/вопрос

Теперь. EDMX (трансформация TT, настраиваемый инструмент, что угодно и т.д.) Генерирует BOTH классы DbContext (в файлах Model.tt/Model.Context.tt) и ObjectContext (через файл Model.designer.cs). См. Изображение ниже:

Both the Model.tt AND the Designer.cs files are defining my entities

Все строит отлично и работает с DbContext (но, очевидно, только если я удалю файл Designer.cs непосредственно перед созданием), но код Designer.cs - и его код на ObjectContext - снова появляется. Как остановить это поведение?!

4b9b3361

Ответ 1

Я не узнал, как остановить файл Designer.cs от создания ObjectContext, но я понял, как сделать так, чтобы это не имело значения. Просто установите для параметра "Сборка" значение "Нет" вместо "Скомпилировать".

Set the Build Action to None

Ответ 2

Файлы .tt генерируют код независимо от стратегии генерации кода в .edmx. Они прослушивают изменения файла .edmx. По крайней мере, так они работают для меня.

Итак, превращая стратегию генерации кода в None в .edmx, вы делаете файл .designer.cs пустым из любого полезного контента.

Затем откройте файл проекта, найдите узлы, представляющие .edmx, по умолчанию он содержится в EntityDeploy node, то есть значение Build Action, и удалите его подраздел Generator.

Ответ 3

В нормальных проектах EF Code First, Code Generation Strategy "None" и ObjectContext не генерируется.

В вашем случае будет показано, что для стратегии генерации кода установлено значение "По умолчанию".

Чтобы остановить создание ObjectContext в xxxx.Designer.cs, перейдите в ваш файл edmx и измените стратегию генерации кода с "По умолчанию" на "Нет".

Если вы проверите xxxx.Designer.cs

// Default code generation is disabled for model 'C:\Users\xyxy\xyxyxy.Web\Models\xyxy.edmx'. 
// To enable default code generation, change the value of the 'Code Generation Strategy' designer
// property to an alternate value. This property is available in the Properties Window when the model is
// open in the designer.

Ответ 4

Я думаю, что проблема имеет значение EntityModelCodeGenerator в поле Custom Tool свойств файла .edmx. Просто удалите это значение.

Я думаю, что это так, потому что я заметил, что в проекте, который я начал в качестве проекта EF6, нет значения, и у него нет файла .designer.cs, но в двух версиях, которые я обновил с EF4, они оба имеют значение и файл конструктора.

(Это соответствует тегу <Generator> в базовом файле .csproj.)