0

いくつかのオブジェクトを作成してDatabaseContextに保存することにより、テストデータベースをワイプして初期化するカスタムコードがあります(スキーマには移行を使用しますが、データには使用しません)。ただし、テスターはより多くのデータを作成しており、クリーンなデプロイを行ったときにテストデータを失いたくありません。したがって、SQL ServerからC#にデータを取得する方法(一度オフにすると)を理解する必要があるため、データ初期化プログラムで実行します。

私の最初のアプローチは、データを手動でコピーしてC#オブジェクト初期化子に貼り付けることでしたが、コピーする行が100以上あるため、これはすぐに古くなりました。

2番目のアプローチは、SQL ServerでSELECTステートメントを使用してオブジェクトを作成し、C#初期化構文をSQL SELECTステートメントに混合してから、SQL Serverによって生成されたC#文字列をVisualStudioにコピーして戻すことでした。

2番目のアプローチは問題ないように見えますが、(毎回SQL INSERTスクリプトを実行するだけでなく)明らかな解決策がないのではないかと思っていました。

4

3 に答える 3

1

私は質問で言及されたアプローチで行くことになりました。SQL SelectステートメントでのC#オブジェクト初期化子の生成。

私が拾ったいくつかのこと、ほとんど明白なこと:

  • すべての数値フィールドのCASTASVARCHAR(ただし、そうでない場合はSQL Serverでエラーが発生します)。

  • 日付:VARCHARに変換し、DateTime.Parse()で囲みます

  • CASEステートメントを使用して、SQLブール値(1/0)を文字列としてtrue/falseに変換します。

  • 列挙型:キャストを生成します。

  • 自動番号IDを使用する場合は、インスタンス名の前に文字を付けることを忘れないでください。オブジェクトを初期化した後、DataContextに追加します。

生成されたコードでC#コードを参照することを恐れないでください。いずれの場合も、SQLServerでは実行されません。

于 2012-09-03T15:16:35.047 に答える
0

DB内のデータを再作成するSQLスクリプトを作成するだけです。
このスクリプトは、コマンドラインまたはC#から実行できます。

于 2012-08-29T13:55:33.893 に答える
0

別のオプションがあります。テストデータベースのバックアップを取り、そのバックアップをターゲットデータベースと同じサーバー上の新しいデータベースにロードし、移行が完了したら(データベースのクリアを含む)、データベース間INSERT...SELECTステートメントを発行します。

このアプローチの利点は、テストチームが気に入った別のバージョンを入手した場合に、バックアップを取り、ステージングデータベースを上書きして、継続的にデータを構築できるようにすることです。

于 2012-08-29T13:57:57.140 に答える