2008-09-25 3 views
4

Я использую SqlMetal для моего класса DataContext.dbml для моего приложения ASP.net с использованием LinqToSql. Когда я изначально создавал файл DataContext.dbml, Visual Studio использовал это для создания связанного файла DataContext.designer.cs. Этот файл конструктора содержит класс DataContext в C#, который используется во всем приложении (и получен из XML в файле dbml) и имеет важное значение для преодоления разрыва между выходом SqlMetal и использованием DataContext с LinqToSql.Autogeneration файла конструктора DataContext при использовании SqlMetal и Visual Studio

Однако, когда я вношу изменения в базу данных и воссоздаю файл dbml, файл конструктора никогда не восстанавливается на моем веб-сайте. Вместо этого сохраняется старый файл конструктора (и поэтому ни одно из изменений в DBML-файле не доступно через класс DataContext LinqToSql).

Единственный процесс, который я был в состоянии использовать до сих пор, чтобы восстановить файл дизайнер

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

ответ

4

Файл designer.cs обычно поддерживается автоматически при внесении изменений в DBML в Visual Studio. Если VS не работает, когда вы воссоздаете DBML, он может и не знать.

Убедитесь, что файл .DBML в Visual Studio имеет свойство Custom Tool, установленное в MSLinqToSQLGenerator. Если это не так, то установите это. Если вы попытаетесь щелкнуть правой кнопкой мыши по DBML после внесения изменений и выбрать Run Custom Tool, чтобы узнать, обновляет ли он .designer.cs.

Оригинальный плакат: Запуск пользовательского инструмента, работающего внутри Visual Studio, для регенерации файла designer.cs.

Я также нашел лучшее решение - вы можете сгенерировать файл класса с помощью SqlMetal: «sqlmetal /code:DataContext.designer.cs/language: csharp DataContext.dbml».

3

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

Что-то заблокировано, поэтому он сгенерировал новый файл db.designer.cs (db1.designer.cs).

Я был вне всякого сравнения открытым, сравнивая этот файл с предыдущей (BC не должен блокировать, и я не думаю, что это была проблема, никогда не было этой проблемы, прежде чем с ним.)

Open файл проекта в блокноте и искать эти записи, я поправился с предыдущей версией в исходном элементе управления.

Это то, что я вернул.

<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

+0

спасибо Дуги, это то, что я искал. Он продолжал создавать дублирующий дизайнерский файл, и это раздражало меня до конца. Это решило мою проблему. – AceCorban 2014-01-23 21:02:15