Entity Framework Code First を使用して作成した Web アプリがあります。それを設定する際に、接続文字列の名前として DBContext の完全な名前空間とクラスを指定することで、DB 接続文字列を DBContext に一致させることができました。
<add name="MyClassProject.EfDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=true;User Id=MyUsername;Password=MyPassword;" providerName="System.Data.SqlClient"/>
最初にプロジェクトをセットアップしたとき、c:\inetpub\wwwroot にプロジェクトを作成し、Visual Studio で実行しました。すべてがうまくいきました。
今、コードを別の Web サイト フォルダーにビルドし、Web サイトを独自の Web サイトおよび IIS のアプリ プールとして実行しようとしています。Web サイトとホスト ファイルをセットアップしましたが、実行しようとすると次のエラーが表示されました。
ログインで要求されたデータベース「MyDatabase」を開けません。ログインに失敗しました。
ユーザー 'IIS APPPOOL\MyAppPool' のログインに失敗しました。
接続文字列でDBに使用するセキュリティユーザー名とパスワードを指定しているように見えるので、なぜこれが起こっているのか疑問に思っています....では、なぜ私のWebサイトが実行されているアプリプールとして接続しようとしているのでしょうか?
また、SQL Server で MyAppPool (または Network Service に変更した場合は Network Service) DB 権限を付与することなく、これを修正するにはどうすればよいですか?
更新:次を使用して DBContext クラスを初期化することを言及する必要がありました。
namespace MyClassProject
{
public class EfDbContext : DbContext
{
public EfDbContext() : base ("MyDatabase")
{
}
}
}