我有一个使用 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 运行它。一切正常。
现在我正在尝试将代码构建到一个单独的网站文件夹,并让网站作为它自己的网站和 IIS 中的应用程序池运行。我已经设置了网站和主机文件,但是当我去运行它时,我收到了以下错误。
无法打开登录请求的数据库“MyDatabase”。登录失败。
用户 'IIS APPPOOL\MyAppPool' 登录失败。
我想知道为什么会这样,因为我似乎在我的连接字符串中指定了用于数据库的安全用户名和密码......那么为什么它试图连接为我的网站正在运行的应用程序池?
另外,我该如何解决这个问题,而不必在 SQL Server 中授予 MyAppPool(或网络服务,如果我将其更改为)DB 权限?
更新:我应该提到我使用以下方法初始化我的 DBContext 类:
namespace MyClassProject
{
public class EfDbContext : DbContext
{
public EfDbContext() : base ("MyDatabase")
{
}
}
}