データベース スキーマの変更後に LINQ to SQL クラスを更新する最良の方法
-
09-06-2019 - |
質問
私はデータベース設計がまだ少し流動的なプロジェクトで LINQ to SQL クラスを使用しています。
クラスとスキーマを同期する簡単な方法はありますか? それともテーブルの設計が変更された場合にクラスを手動で更新する必要がありますか?
解決
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>
他のヒント
私自身は試したことはありませんが、 Huagati DBML/EDMX ツール 他の人からも勧められています。
Huagati DBML/EDMX Toolsは、Visual Studio 2008のLinq2SQL/DBMLダイアグラムデザイナーとVisual Studio 2008 SP1のADO.NETエンティティフレームワークデザイナーに機能を追加するVisual Studioのアドインです。このアドインは、LINQ-to-SQL(DBML)およびEF(EDMX)クラスとプロパティの名前を変更して.NET命名規則を使用し、LINQへのドキュメント/説明を追加するために、データベースの変更でLINQ2SQLデザイナーの図を更新するための新しいメニューオプションを追加します。 -to-SQLデータベースプロパティから生成されたクラス。
これは、追加のソフトウェアを必要とせずに、単純な変更 (フィールドの追加、いくつかのテーブルなど) にのみ機能する簡単な修正です。
説明書:
- 変更されたテーブルのコピーをデザイナーにプルします (後で削除されます)。
- ここで、すべての新しい (または変更された) フィールドを選択し、(
right-click ->
)copy
- 元のテーブルで右クリックし、
insert
それら (変更されたフィールドを最初に削除します) - 次に、コピー元のテーブルを削除します
当然のことですが、どういうわけか直感的ではありません。適切な属性とタイプがすべてコピーされ、すべてのリンクがそのまま残るため、非常に役立ちました。それが役に立てば幸い。
いつ使用するか:
もちろん、前述したように、小さな変更の場合には適していますが、多くのリンクを持つテーブルを手動で置き換えたり、SQLMetal によってデータベース構造全体を生成したくない場合よりも確実に優れています。たとえば、大量のテーブルがある場合 (例:SAP)、または異なるデータベースからのクロスリンクされたテーブルを使用する場合。
DamienG がいくつか書いています t4 テンプレート これは、VS が生成するものの一部を置き換えることができます。これらは、コマンド ライン ツールを使用していつでも再実行できます。
T4 テンプレートには、編集可能であるという追加の利点があります。これにより、生成された内容を思う存分調整できます。
ジェフは最近このことについて不満を言ったと思います。一般的な手法の 1 つは、すべてのオブジェクトをデザイナーに再度ドラッグすることです。
他の誰かがより良いアプローチを提案してくれることを願っています。
Dbml スクリプトにスクリプト変更を行うツールを作成しました。参照してください。 http://code.google.com/p/linqtodbmlrunner/ そして私のブログ http://www.adverseconditionals.com