私のチームは SqlMetal を使用して、SqlServer データベースからデータベース クラスを生成しています。既存のすべてのクラスと外部キーの関連付けに対しては完全に機能しますが、追加したい特定の新しい外部キーの関連付けのコードを生成することを拒否しています。このキーは、監査レコードが作成された時間とそれが作成されたユーザーの詳細を示す、監査テーブルからグローバル イベント テーブルへのキーです。システムには、他の監査テーブルとこのグローバル「イベント」テーブルとの間の同様の外部キー関連付けが多数存在し、SqlMetal はそれらの関連付けのコードを生成します。
次の方法でこの問題を解決しようとしました。
- テーブルの削除と再作成
- 主キーの削除
- 別の名前で新しい同一のテーブルを作成する
- テーブルから他のすべてのフィールドを削除する
- インデックスのダンプ
- データベースの新規構築の実行
- 外部キーの名前変更
上記のいずれも問題を解決していないようです。ただし、SqlMetal は、このテーブルからシステム内の一部 (すべてではない) の他のテーブルへの外部キー関連付けのコードを正しく生成します。これら 2 つのテーブル間の関連付けは、元の create table スクリプトを後で実行するのではなく、外部キーの関連付け (または新しい同等のテーブル) を含めるように変更した場合にのみ生成されます。残念ながら、この変更をスクリプトとして既存の実稼働データベースに展開できるようにする必要があるため、これはオプションではありません。同様の問題に言及している記事やフォーラムの投稿をいくつか見たことがありますが、解決策や説明さえも提供していないようです。