Ответ 1
Я не узнал, как остановить файл Designer.cs от создания ObjectContext, но я понял, как сделать так, чтобы это не имело значения. Просто установите для параметра "Сборка" значение "Нет" вместо "Скомпилировать".
Теперь. EDMX (трансформация TT, настраиваемый инструмент, что угодно и т.д.) Генерирует BOTH классы DbContext (в файлах Model.tt/Model.Context.tt) и ObjectContext (через файл Model.designer.cs). См. Изображение ниже:
Все строит отлично и работает с DbContext (но, очевидно, только если я удалю файл Designer.cs непосредственно перед созданием), но код Designer.cs - и его код на ObjectContext - снова появляется. Как остановить это поведение?!
Я не узнал, как остановить файл Designer.cs от создания ObjectContext, но я понял, как сделать так, чтобы это не имело значения. Просто установите для параметра "Сборка" значение "Нет" вместо "Скомпилировать".
Файлы .tt
генерируют код независимо от стратегии генерации кода в .edmx
. Они прослушивают изменения файла .edmx
. По крайней мере, так они работают для меня.
Итак, превращая стратегию генерации кода в None
в .edmx
, вы делаете файл .designer.cs
пустым из любого полезного контента.
Затем откройте файл проекта, найдите узлы, представляющие .edmx
, по умолчанию он содержится в EntityDeploy
node, то есть значение Build Action, и удалите его подраздел Generator
.
В нормальных проектах 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.
Я думаю, что проблема имеет значение EntityModelCodeGenerator
в поле Custom Tool
свойств файла .edmx
. Просто удалите это значение.
Я думаю, что это так, потому что я заметил, что в проекте, который я начал в качестве проекта EF6, нет значения, и у него нет файла .designer.cs
, но в двух версиях, которые я обновил с EF4, они оба имеют значение и файл конструктора.
(Это соответствует тегу <Generator>
в базовом файле .csproj
.)