76

データベース設計がまだ少し流動的なプロジェクトで、LINQ to SQL クラスを使用しています。

クラスをスキーマと同期させる簡単な方法はありますか? または、テーブルのデザインが変更された場合に手動でクラスを更新する必要がありますか?

4

7 に答える 7

65

SQLMetal.exe を使用して、dbml または cs/vb ファイルを生成できます。ビルド前のスクリプトを使用して開始し、datacontext プロジェクトが属するディレクトリをターゲットにします。

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>
于 2008-09-02T16:58:28.633 に答える
17

自分で試したことはありませんが、他の人はHuagati DBML/EDMX Toolsを推奨しています。

Huagati DBML/EDMX ツールは、Visual Studio 2008 の Linq2SQL/DBML ダイアグラム デザイナーと、Visual Studio 2008 SP1 の ADO.NET Entity Framework デザイナーに機能を追加する Visual Studio 用のアドインです。このアドインには、データベースの変更による Linq2SQL デザイナー ダイアグラムの更新、.net 命名規則を使用するための Linq-to-SQL (DBML) および EF (EDMX) クラスとプロパティの名前変更、Linq へのドキュメント/説明の追加のための新しいメニュー オプションが追加されています。 -to-SQL データベース プロパティから生成されたクラス。

DBML ツールのスクリーンショット

于 2008-09-02T16:59:41.873 に答える
9

これは、追加のソフトウェアを使用しない簡単な修正です。単純な変更 (フィールドの追加、いくつかのテーブルなど) に対してのみ機能します。

指示:

  • 変更されたテーブルのコピーをデザイナーにプルします (後で削除されます)。
  • ここで、すべての新しい (または変更された) フィールドと ( right-click ->)を選択します。copy
  • 元のテーブルで右クリックし、insertそれらを (最初に変更されたフィールドを削除します)
  • コピー元のテーブルを削除します

当然のことですが、どういうわけか直感的ではなく、すべての適切な属性と型がコピーされ、すべてのリンクがそのまま維持されるため、非常に役立ちました。それが役に立てば幸い。

いつ使用するか:

もちろん - 前述のように - 小さな変更には有効ですが、手動でテーブルを多くのリンクに置き換えるよりも、または SQLMetal によって生成されたデータベース構造全体を望まない場合よりも確実に優れています。たとえば、大量のテーブル (SAP など) がある場合や、異なるデータベースの相互リンクされたテーブルを使用する場合などです。

于 2014-02-03T15:51:37.877 に答える
5

DamienG は、VS が生成するものの一部を置き換えることができるいくつかのt4 テンプレートを作成しました。これらは、コマンド ライン ツールを使用していつでも再実行できます。

T4 テンプレートには、編集できるという追加の利点があります。これにより、心ゆくまで生成されるものを微調整できます。

于 2008-10-21T12:56:46.710 に答える
4

ジェフは最近これについて不平を言ったと思います。一般的な手法の 1 つは、すべてのオブジェクトをもう一度デザイナーにドラッグすることです...

他の誰かがより良いアプローチでチャイムを鳴らしてくれることを願っています!

于 2008-09-02T16:56:58.403 に答える
1

Dbmlスクリプトにスクリプトを変更するためのツールを作成しました。http ://code.google.com/p/linqtodbmlrunner/と私のブログhttp://www.adverseconditionals.comを参照してください。

于 2008-11-28T18:21:39.347 に答える