1

いくつかのレガシー SQL Server データベースがあり、スキーマを変更することがあります。現在、C++ で記述されたユーティリティを使用して、ユーザーがこれらのスキーマ変更で DB を更新できるようにしています。ユーティリティは現在、すべての DB オブジェクトを作成するために動的 SQL を生成します。私はこれをやり直すことを検討しており、EF の移行が良い方法かもしれないと考えました。私はこの件について少し読みましたが、それがどのように機能するかについての一般的な考えがあります。しかし、現在の手順を置き換えるためにどのようにセットアップするか (またはそれが可能な場合) を理解するのに少し苦労しています。現在、クライアントは多くの以前のバージョンのいずれかである可能性があります。可能な限り古いバージョンに戻って、そこからモデル/初期移行を作成する必要があると思います。次に、すべてのバージョンからの更新をサポートするために、バージョンの変更ごとに増分移行を生成します。それは正しい仮定ですか?また、現在、クライアントは sql server 2000、2005、または 2008 を使用している可能性があります。これは、セットアップ方法に影響しますか (または可能であれば)? さらに、目標は、ユーザーが移行 (できれば上または下) を操作するために使用できる (C# - おそらく WPF) UI を備えたユーティリティを作成することです。パッケージマネージャー内のコマンドラインから移行を操作する方法の例をたくさん見てきましたが、本番環境で DB をアップグレード/ダウングレードするための使いやすい UI を備えたユーティリティを作成する方法についてはあまり多くありません。また、移行でストアド プロシージャを作成する方法を示すものは見たことがありません (私たちの DB はいくつかのストアド プロシージャに依存しています)。私は、他に何もなければ、Sql() メソッドを使用して SQL クエリを生成し、SP を作成できます。あれは正しいですか?より良い方法はありますか?

私の質問が少し具体的でないことは承知しており、申し訳ありません。しかし、私はまだこれを学習する最初のプロセスにあり、これが良い方法であるかどうかを知りたい. ガイダンスをいただければ幸いです。

ありがとう、デニス

4

1 に答える 1

0

まず、SQL Server のサポートについては、Entity Framework は実際には SQL Server 2000 をサポートしていません。次の質問を参照してください: EntityFramework SQL Server 2000?

複数のバージョンをすべてサポートするという問題については、最初に最も古いバージョンの初期移行を生成し、次にモデルを段階的に変更して移行を生成し、新しいバージョンをサポートする必要があることについて正しい考えを持っています。移行がデータベース内のモデルをどのように表現するかについて意見が分かれており、それを完全に表現するモデルと一連の移行で終わるために多くのことをいじることになるため、これは苦痛になります。特定の問題は、インデックス、列の長さ、データ型、ストアド プロシージャ、トリガー、関数、パーティション分割です。

関数はほとんどの問題を回避しますが、移行にはやなどのSql()関数も役立ちます。CreateIndexAlterColumn

これを自動化するために、移行はそれ自体が.Netオブジェクトであるため、プログラムで呼び出すことができるpowershellコマンドレットとして確実に利用できます。

この質問は 1 年前のものなので、これを行うかどうかはすでに決定済みであると思います。私の意見では、努力する価値があることを理解するのは難しいということです。このデータベースを使用するコード ベースを Entity Framework に再プラットフォーム化する場合、それは理にかなっています。それ以外の場合は、データベースのバージョン管理のためのより優れたツールが存在するはずです. 私の最初の寄港地は Redgate です。

于 2013-10-25T07:59:55.353 に答える