Автогенерация файла конструктора DataContext при использовании SqlMetal и Visual Studio - PullRequest
5 голосов
/ 25 сентября 2008

Я использую 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 ]

6 голосов
/ 25 сентября 2008

Файл 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
3 голосов
/ 23 августа 2011

Не знаю, как это получилось, но вот некоторые вещи, над которыми я работал, чтобы вернуть его.

Что-то заблокировано, поэтому он сгенерировал новый файл 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

...