Автогенерация файла конструктора DataContext при использовании SqlMetal и Visual Studio
Я использую SqlMetal, чтобы обобщить мой класс DataContext.dbml для моего приложения ASP.net, используя LinqToSql. Когда я изначально создал файл DataContext.dbml, Visual Studio использовала его для создания связанного файла DataContext.designer.cs. Этот файл конструктора содержит класс DataContext в C#, который используется во всем приложении (и является производным от XML в файле dbml) и важен для преодоления разрыва между выводом SqlMetal и использованием DataContext с LinqToSql.
Однако, когда я изменяю базу данных и воссоздаю файл dbml, файл конструктора никогда не восстанавливается на моем веб-сайте. Вместо этого сохраняется старый файл конструктора (и поэтому ни одно из изменений в файле DBML не доступно через класс LinqToSql DataContext).
Единственный процесс, который я смог использовать для регенерации файла конструктора, это
- Перейдите в Windows Explorer и удалите файлы dbml и designer.cs.
- Перейдите в Visual Studio и нажмите "Обновить" в обозревателе решений. Файлы dbml и designer.cs теперь исчезают из проекта.
- Восстановите файл dbml, используя SqlMetal
- Перейдите в Visual Studio и нажмите "Обновить" в обозревателе решений. Теперь файл designer.cs воссоздан.
Кажется, что Visual Studio будет генерировать файл designer.cs только при обнаружении нового файла dbml, у которого еще нет файла designer.cs. Этот процесс довольно непрактичен, так как включает в себя несколько шагов вручную и портит контроль над исходным кодом.
Кто-нибудь знает, как я могу получить файл designer.cs автоматически регенерируемой без необходимости ручного процесса удаления / обновления / регенерации / удаления, описанного выше?
2 ответа
Файл designer.cs обычно поддерживается автоматически при внесении изменений в DBML в Visual Studio. Если VS не работает, когда вы воссоздаете DBML, он может не знать.
Убедитесь, что для файла.DBML в Visual Studio свойство Custom Tool имеет значение MSLinqToSQLGenerator. Если это не так, то установите его на это. Если это так, попробуйте щелкнуть правой кнопкой мыши DBML после внесения изменений и выбрать "Запустить пользовательский инструмент", чтобы проверить, обновляет ли он файл.designer.cs.
Вы также можете создать файл класса, используя SqlMetal:
sqlmetal /code:DataContext.designer.cs /language:csharp DataContext.dbml
Не уверен, как это получилось, но вот некоторые вещи, над которыми я работал, чтобы вернуть его.
Что-то заблокировало его, поэтому он сгенерировал новый файл db.designer.cs (db1.designer.cs).
У меня было не поддающееся сравнению сравнение, сравнивая этот файл с предыдущим (BC не должен блокироваться, и я не думаю, что это была проблема, такой проблемы раньше никогда не было).
Откройте файл проекта в блокноте и найдите эти записи, я вспомнил предыдущую версию в системе контроля версий.
это то, что я принес.
<Compile Include="db.designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>db.dbml</DependentUpon>
</Compile>
...
<LastGenOutput>db.designer.cs</LastGenOutput>
lastgenOutput был установлен в db1.desginer.cs