web-dev-qa-db-ja.com

Linq to SQL dbmlファイルを更新するにはどうすればよいですか?

Linq to SQL .dbmlファイルを更新するにはどうすればよいですか?

193
Ante

モデルの同期を保つには、3つの方法があります。

  1. 変更したテーブルをデザイナーから削除し、データベースエクスプローラーからデザイナー画面にドラッグして戻します。これを確実に機能させるには、次のことが必要であることがわかりました。

    a。データベースエクスプローラーでデータベーススキーマを更新します(右クリックして更新)
    b。テーブルを削除した後、デザイナーを保存します
    c。テーブルをドラッグして戻した後、再度保存します。

    ただし、プロパティを変更した場合(たとえば、関連付けの子プロパティをオフにした場合)、これらの変更は明らかに失われます-もう一度作る必要があります。

  2. SQLMetalを使用して、データベースからスキーマを再生成します。 これをスクリプト化する方法 を示す多くのブログ投稿を見てきました。

  3. DBMLの[プロパティ]ペインで直接変更します。これは、フィールドでnullを許可するなどの簡単な変更に対して機能します。

Visual Studio 2015、2017、2019では、DBMLデザイナーはデフォルトではインストールされません。VSを閉じて、VSインストーラーを起動し、インストールを変更する必要があります。 LINQ to SQLツールは、インストールする必要がある機能です。 VS 2017/2019の場合、Individual Components> Code Toolsにあります。

244
Robert Harvey

たとえば、列を追加して.dbml-diagramのテーブルを更新するには、次のようにします。

  1. SQL Server Explorerウィンドウを更新します。
  2. テーブルの「新しい」バージョンを.dbml-diagram(下図のreport1)にドラッグします。

report1 is the new version of the table

  1. テーブルの新しいバージョンで追加された列をマークし、を押します Ctrl+C 追加された列をコピーします。

copy the added columns

  1. テーブルの「古い」バージョンをクリックして押します Ctrl+V 追加された列を、すでに存在するバージョンのテーブルに貼り付けます。

paste the added columns to the old version of the table

47
M463

また、CodeSmithに基づいた PLINQO コード生成テンプレートのセットをチェックアウトすることもできます。これにより、Linq-to-SQLの素晴らしい機能を使用できます。

  • クラスごとに1つのファイルを生成します(単一の巨大なファイルの代わりに)
  • 必要に応じてモデルを更新します
  • より多くの機能

http://www.plinqo.com のPLINQOサイトをチェックして、紹介動画をご覧ください。

私が知っている2番目のツールは Huagati DBML/EDMX tools です。これにより、DBML(Linq-to-SQL)およびEDMX(Entity Framework)マッピングファイルの更新が可能になります(命名規則など)。 )。

マーク

5
marc_s

すべての.DBMLファイル内の各テーブルのinformation_schemaモデルを動的にクエリし、データベースからの新しいスキーマ情報で.DBMLファイルの一部を上書きするカスタム記述T4テンプレートを使用します。私は非常にこのようなソリューションを実装することをお勧めします-それは私に時間を節約しました関連付けを維持します。このソリューションを使用すると、スキーマが変更されたときにコンパイル時エラーが発生します。ただし、バージョン管理システムを使用していることを確認する必要があります。差分は本当に便利だからです。これは、DBスキーマの最初のアプローチで開発している場合にうまく機能する優れたソリューションです。もちろん、私の会社のコードを共有することはできませんので、あなた自身でこれを書いてください。しかし、Linq-to-XMLをある程度知っていて、学校に行くことができる場合 このプロジェクトで であれば、あなたが行きたいところに行くことができます。

4
mattmc3

テーブルを更新してからDBMLを更新することには微妙な違いがあります...既存のテーブルに変更が加えられた場合、外部キー関係がすぐに引き継がれるとは限りません。回避策は、プロジェクトのビルドを実行してから、テーブルを再度追加することです。これをMSに報告し、VS2010で修正されました。

DBMLディスプレイは新しい外部キー制約を表示しません


主な回答に記載されている指示は明確ではないことに注意してください。テーブルを更新するには

  1. Dbmlデザインサーフェイスを開く
  2. 右クリックしてすべてのテーブルを選択し、[クリック]、[すべて選択]または CTRLa
  3. CTRLx (切る)
  4. CTRLv (ペースト)
  5. ソリューションを保存して再構築します。
2
ΩmegaMan

Dbmlを更新すると、生成されるコードも更新されるため、VS2008に組み込まれているビジュアルデザイナーを使用することをお勧めします。ビジュアルデザイナーの外部でdbmlを変更すると、基になるコードが同期しなくなります。

2

ストアドプロシージャの更新の場合は、.dbmlファイルから削除し、再度挿入する必要があります。ただし、ストアドプロシージャに2つのパスがある場合(例:何かの場合、いくつかの列を表示する場合、または他の列を表示する場合)、2つのパスの列エイリアスが同じであることを確認してください!!!それ以外の場合、最初のパス列のみが存在します。