5

LinqToSqlを使用して、ASP.net アプリケーションの DataContext.dbml クラスを一般化するために SqlMetal を使用しています。最初に DataContext.dbml ファイルを作成したとき、Visual Studio はこれを使用して、関連する DataContext.designer.cs ファイルを作成しました。このデザイナー ファイルには、アプリ全体で使用される C# の DataContext クラス (および dbml ファイルの XML から派生) が含まれており、SqlMetal の出力と LinqToSql での DataContext の使用との間のギャップを埋めるために不可欠です。

ただし、データベースに変更を加えて dbml ファイルを再作成すると、web サイトでデザイナー ファイルが再生成されません。代わりに、古いデザイナー ファイルが維持されます (したがって、LinqToSql DataContext クラスを介して DBML ファイルへの変更にアクセスすることはできません)。

これまでのところ、デザイナー ファイルを再生成するために使用できた唯一のプロセスは次のとおりです。

  1. Windows エクスプローラーに移動し、dbml ファイルと designer.cs ファイルの両方を削除します。
  2. Visual Studio に移動し、ソリューション エクスプローラーで [更新] をクリックします。dbml および designer.cs ファイルがプロジェクトから消えます。
  3. SqlMetal を使用して dbml ファイルを再生成します。
  4. Visual Studio に移動し、ソリューション エクスプローラーで [更新] をクリックします。これで、designer.cs ファイルが再作成されました。

まだdesigner.csファイルがない新しいdbmlファイルが検出された場合、Visual Studioはdesigner.csファイルのみを生成するようです。このプロセスは、いくつかの手動の手順を必要とし、ソース管理を台無しにするため、かなり非現実的です。

上記の手動の削除/更新/再生成/削除プロセスに従わなくても、designer.cs ファイルを自動的に再生成する方法を知っている人はいますか?

4

2 に答える 2

7

通常、Visual Studio 内で DBML に変更を加えると、designer.cs ファイルは自動的に維持されます。DBML を再作成するときに VS が実行されていない場合、認識されない可能性があります。

Visual Studio の .DBML ファイルのカスタム ツール プロパティが MSLinqToSQLGenerator に設定されていることを確認します。そうでない場合は、それに設定します。変更を行った後に DBML を右クリックし、[カスタム ツールの実行] を選択して、.designer.cs が更新されるかどうかを確認してください。

SqlMetal を使用してクラス ファイルを生成することもできます。

sqlmetal /code:DataContext.designer.cs /language:csharp DataContext.dbml
于 2008-09-25T17:20:13.587 に答える
4

それがどのようにそれをしたのかはわかりませんが、それを取り戻すために私が取り組んだことがいくつかあります.

何かがロックされたため、新しい 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 に設定されました

于 2011-08-23T18:18:42.187 に答える