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 を使用する必要があったように感じ始めています。