2013-01-11 10 views
8

単純なASP.NET MVCアプリケーションをステージングサーバーにデプロイしています.EntityFrameworkが既存のデータベースを移行しようとすると、次のエラーが発生します。次のようにEntityFrameworkの移行で既存のデータベースを作成しよう

CREATE DATABASE permission denied in database 'master'. 

状況は次のとおりです。

  • これは、マイグレーションを実行初めてです。
  • データベースは既に存在します(実際はUmbracoデータベースです)。

それは(EntityFrameworkから)は、以下の方法を思われることが明らかにtrueを返す必要がある場合、falseを返します。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DataContext, Configuration>()); 

自動:

System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists() 

データベースの初期化子は、次のコードを持っていますコードベースの移行を使用しているため、移行はオフになっています。

接続文字列が正しいデータベースを指していて、ユーザーはそのデータベースに対してdb_owner権限を持っています。ユーザーは、サーバー上の他の表に対する権限を持ちません。

これはよくある問題ですか?誰もがこれに対する解決策を知っていますか?

Thnx!

+1

あなたはそれがシステム・データベースの名前だと問題にの –

+0

が重複する可能性を引き起こす可能性があるので、マスターにならないためにそれを設定してみてください可能性がクエリを実行することが可能であること[CREATE DATABASEアクセス許可がデータベース 'master' Entity Framework Migrationで拒否されました](0120-338-005)データベース: –

+0

データベース接続文字列内の名前はマスタではありません(これは実際にはシステムデータベースなので)。これは既存のデータベースであり、ユーザーはそのデータベースに対する権利しか持ちません。 EnsureDatabaseExistsがデータベースが存在しないと報告するため、EntityFrameworkはデータベースを作成しようとします。その後、EFはDBを作成しようとしますが、ユーザーにはその権利がありません。しかし、それは問題ではありません。 EFは何らかの理由でdbが実際に存在することを検出できません –

答えて

1

データベースが存在することを確認しますが - DBのリストのための'sys.databases'を照会するには、ユーザーの許可を前提とし、以下のスクリプト

IF db_id(N'MyDatabaseName') IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=N'MyDatabaseName' 

を実行します。 このクエリが失敗した場合、EFはDBが作成されていないと判断し、再度作成しようとします。

することを確認してください - 移行を実行するユーザーは、上記に成功

+0

便利ですが、どう思いましたか?そして、第二に、EFにそれをやめさせることができます。それは安全な環境には適切ではありません:) –

+0

これを理解している--hm .. SSMSが生成する標準のSQLデータベース作成スクリプトからSQLを使いました。 EFがデータベースを作成するのを止めるにはどうしたらいいですか?私はイエスと思う。デフォルトの実装をそのまま使用するのではなく、カスタムのDBイニシャライザを作成するだけです – Marty

関連する問題