Автогенерация файла конструктора 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).

Единственный процесс, который я смог использовать для регенерации файла конструктора, это

  1. Перейдите в Windows Explorer и удалите файлы dbml и designer.cs.
  2. Перейдите в Visual Studio и нажмите "Обновить" в обозревателе решений. Файлы dbml и designer.cs теперь исчезают из проекта.
  3. Восстановите файл dbml, используя SqlMetal
  4. Перейдите в 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

Другие вопросы по тегам