回答:
モデルの同期を保つには3つの方法があります。
変更されたテーブルをデザイナーから削除し、データベースエクスプローラーからデザイナー画面にドラッグして戻します。これが確実に機能するためには、次のことが必要であることがわかりました。
a。データベースエクスプローラーでデータベーススキーマを更新します(右クリック、更新)
。テーブルを削除した後、デザイナーを保存します
。テーブルをドラッグして戻した後、再度保存します。
ただし、プロパティを変更した場合(たとえば、関連付けの子プロパティをオフにした場合)、これらの変更は明らかに失われるので、再度作成する必要があります。
SQLMetalを使用して、データベースからスキーマを再生成します。私はこれをスクリプト化する方法を示す多くのブログ投稿を見てきました。
DBMLの[プロパティ]ペインで直接変更します。これは、フィールドでnullを許可するなどの単純な変更で機能します。
DBMLデザイナは、Visual Studio 2015、2017、または2019にはデフォルトでインストールされていません。VSを閉じ、VSインストーラーを起動して、インストールを変更する必要があります。SQLツールへのLINQは、インストールしなければならない機能です。VS 2017/2019の場合は、[個別コンポーネント]> [コードツール]にあります。
.dbml-diagramのテーブルを、たとえば列を追加して更新するには、次のようにします。
また、CodeSmithに基づくコード生成テンプレートのPLINQOセットをチェックアウトすることもできます。これにより、Linq-to-SQLのために、Linq-to-SQLで多くの優れた機能を実行できます。
PLINQOのサイト(http://www.plinqo.com) をチェックして、紹介ビデオを ご覧ください。
私が知っている2番目のツールはHuagati DBML / EDMXツールで、DBML(Linq-to-SQL)およびEDMX(Entity Framework)マッピングファイルなどの更新を可能にします(命名規則など)。
マーク
すべての.DBMLファイル内の各テーブルのinformation_schemaモデルを動的にクエリし、.DBMLファイルの一部をデータベースからの新しいスキーマ情報で上書きするカスタムのT4テンプレートを使用します。私は非常にこのようなソリューションを実装することをお勧めします。これにより、時間を大幅に節約でき、テーブルを削除してモデルに再度追加するのとは異なり、関連付けを維持できます。このソリューションでは、スキーマが変更されるとコンパイル時エラーが発生します。ただし、バージョン管理システムを使用していることを確認する必要があります。これは、比較が非常に便利だからです。これは、DBスキーマの最初のアプローチで開発している場合にうまく機能する優れたソリューションです。もちろん、私は私の会社のコードを共有することはできませんので、あなたは自分でこれを自分で書くことに専心しています。しかし、いくつかのLinq-to-XMLを知っていて、このプロジェクトで学校に通うことができれば、自分がなりたい場所にたどり着くことができます。
dbmlを更新すると、生成されたコードも更新されるため、VS2008に組み込まれているビジュアルデザイナーを使用することをお勧めします。ビジュアルデザイナーの外部でdbmlを変更すると、基になるコードが同期しなくなります。
テーブルを更新してからDBMLを更新するニュアンスがあります...既存のテーブルに変更が加えられた場合、外部キーの関係がすぐに反映されるとは限りません。回避策は、プロジェクトのビルドを実行してから、テーブルを再度追加することです。これをMSに報告し、VS2010で修正されました。
主な回答で与えられた指示は明確ではないことに注意してください。テーブルを更新するには
ストアドプロシージャの更新の場合は、.dbmlファイルから削除し、再度挿入する必要があります。ただし、ストアドプロシージャに2つのパスがある場合(例:何かがある場合、一部の列を表示するか、他のいくつかの列を表示する場合)、2つのパスに同じ列のエイリアスがあることを確認してください!!! それ以外の場合は、最初のパス列のみが存在します。
これは、LINQ to SQL dbmlと関連ファイルを更新して、データベーステーブルの1つに追加した新しい列を含めるために機能した完全な段階的な方法です。
上記で提案されているように、デザインサーフェイスを変更する必要があります。ただし、いくつかの追加手順を実行する必要があります。これらは完全なステップです:
1. Drag your updated table from Server Explorer onto the design surface
2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)
3. Delete the "new" table that you just dragged over
4. Click and highlight the stored procedure, then delete it
5. Drag the new stored procedure and drop into place.
6. Delete the .designer.vb file in the code-behind of the .dbml
(if you do not delete this, your code-behind containing the schema will
not update even if you rebuild and the new table field will not be included)
7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).