0

MVC3 Web アプリケーションで C# の Entity Framework 5 を使用してこれを実行しようとしています。

// Local DB connection
var dbId = String.Format(@"Data Source=.\SQLEXPRESS;AttachDbFilename={0}.mdf;Database=Tests;Integrated Security=True;Pooling=False;Connect Timeout=30;User Instance=True", _dbPath);
_connection = new SqlConnection(dbId);

Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());

// Reset database if the file exists
var ctx = new MyContext(_connection);
ctx.Database.CreateIfNotExists();
ctx.Database.Initialize(true);
ctx.SaveChanges();

return _connection;

これは私のテストでは機能しますが、Web アプリケーションを実行するときは機能しません。Web アプリケーションを実行すると、次のようになります。

SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索中にエラーが発生しました)

他のいくつかの質問で、接続文字列から「ユーザー インスタンス」を削除することを提案した人がいますが、その結果は次のようになります。

データベース 'master' で CREATE DATABASE 権限が拒否されました。

ここで私の目標を完全に明確にさせてください。私は、Web アプリケーションにデータベース インスタンス ( sqlexpress) をオンデマンドで作成させようとしています。

事前にデータベース インスタンスを作成することは解決策ではありません。

アプリのワーカーがデータベースにアクセスして作成するときに、何らかの特別な権限が必要な理由について、私は非常に困惑しています。

どうすればこれを行うことができますか?

sqlite を使用すると、これは些細な操作であり、Entity Framework (したがって SQL Server Express) を使用するのは間違いであり、代わりに流暢な nhibernate と sqlite を使用する必要があったように感じ始めています。

4

1 に答える 1

1

この記事http://support.microsoft.com/kb/2002980は、「ASP.Net V4.0」アプリプール「ApplicationPoolIdentity」のデフォルトアカウントのファイル権限の問題であり、「ApplicationPoolIdentity」を使用するように変更することを提案しています。代わりに「ネットワークサービス」。

于 2012-10-03T03:20:38.470 に答える