Автогенерация файла конструктора 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 и удалите файлы 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 без необходимости следовать описанному выше процессу ручного удаления / обновления / восстановления / удаления?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
8 610
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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

Спасибо, Дуг, это то, что я искал. Он продолжал создавать дубликаты дизайнерского файла, и это меня безмерно раздражало. Это решило мою проблему.

AceCorban 24.01.2014 01:02

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