2

最初に、多数のテーブルとビューを含む小さなデータベースを EF 5 コードにリバース エンジニアリングしました。

これを行うと、テーブルごとに一連のモデルとマッピング クラスが取得され、生成されDbContextた .

ビューごとに POCO クラスも生成しますが、パッケージ マネージャー コンソールを実行Enable-MigrationsAdd-Migrationて使用すると、移行によって SQL Server ビューが再作成されません。

次のようにカスタム SQL を使用してビューを作成するために、移行を手動で更新しようとしました。

Sql("CREATE VIEW [dbo].[viewUsersDeactivated] "
          + "AS "
          + "SELECT ... ");

これは を実行すると正常に動作Update-Databaseしますが、コマンドから出力される SQL スクリプトUpdate-Database -Scriptが有効ではないようで、次のエラーが発生します。

'CREATE VIEW' は、バッチ内の唯一のステートメントである必要があります。

Sql("GO");カスタム SQL ステートメントのそれぞれの間に挿入することは、スクリプトの生成には機能しますが、 を使用して更新することはできなくなりUpdate-Database、両方に機能する方法を見つけることができません。

したがって、私の質問は次のようになります: SQL Server ビューをコード ファーストの移行スクリプトに含めて、SQL Server を使用して生成された実稼働スクリプトを使用してデータベースを作成できるようにするにはどうすればよいですか?Update-DatabaseUpdate-Database -Script

ありがとう!

4

1 に答える 1

5

これがベスト プラクティスであるかどうかは完全にはわかりませんが、他の誰かがより良い解決策を持っている可能性がありますが、ビュー作成スクリプト全体を Execute でラップすることでこれを回避しました。

var sql = "CREATE VIEW [dbo].[TheViewName] AS ......."
sql = sql.Replace("'", "''"); // sanitize the sql string
sql = string.Format("EXECUTE sp_executesql N'{0}'", sql);
Sql(sql);
于 2012-12-10T13:39:59.603 に答える