实体框架代码首先忽略连接字符串,而不是使用IIS

Sea*_*sby 7 entity-framework connection-string entity-framework-4 ef-code-first dbcontext

我有一个使用Entity Framework Code First创建的Web应用程序.在设置它时,我设法将我的数据库连接字符串与我的DBContext匹配,方法是将DBContext的完整命名空间和类指定为连接字符串的名称.

<add name="MyClassProject.EfDbContext"  connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=true;User Id=MyUsername;Password=MyPassword;" providerName="System.Data.SqlClient"/>
Run Code Online (Sandbox Code Playgroud)

最初,当我设置项目时,我只是在c:\ inetpub\wwwroot中创建它,然后通过Visual Studio运行它.一切都很好.

现在我正在尝试将代码构建到一个单独的网站文件夹,并让网站在IIS中运行它自己的网站和应用程序池.我已经设置了网站和我的主机文件,但是当我去运行它时,我收到了以下错误.

无法打开登录请求的数据库"MyDatabase".登录失败.

用户'IIS APPPOOL\MyAppPool'登录失败.

我想知道为什么会这样,因为我似乎在我的连接字符串中指定用于数据库的安全用户名和密码....所以为什么它尝试连接我的网站运行的应用程序池?

另外,如何解决这个问题,而不必将SQL Server中的MyAppPool(或网络服务,如果我将其更改为)数据库权限?

更新:我应该提到我使用以下命令初始化我的DBContext类:

namespace MyClassProject 
{ 
    public class EfDbContext : DbContext 
    { 
        public EfDbContext() : base ("MyDatabase") 
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ite 3

消除Integrated Security=true;。这就是忽略当前用户的设置。