我有一个使用实体框架代码优先创建的Web应用程序。在设置它的时候,我设法通过指定DBContext的完整命名空间和类作为连接字符串的名称,将我的数据库连接字符串与我的DBContext匹配。实体框架代码首先忽略连接字符串,使用IIS代替
<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'登录失败。
我不知道为什么发生这种情况,因为我似乎在指定安全的用户名和密码,我的连接字符串使用了DB ....所以为什么它要连接的应用程序池我的网站正在运行?
另外,如何解决这个问题,而不必为MyAppPool(或网络服务,如果我改变它)SQL Server中的数据库权限?
更新:我应该提到,我用我的初始化类的DbContext:
namespace MyClassProject
{
public class EfDbContext : DbContext
{
public EfDbContext() : base ("MyDatabase")
{
}
}
}
我已经从连接字符串中删除了该属性,但仍然存在相同的问题。我甚至尝试明确设置Integrated Security = false;但那也没用。 – 2013-03-05 01:04:17
@SeanHolmesby你确定它使用连接字符串吗? – 2013-03-05 01:11:36
当我运行Visual Studio(当它运行时)它肯定会将数据添加到我试图引用的数据库中。 我有: - 命名空间MyClassProject { 公共类EfDbContext:的DbContext { 公共EfDbContext() :基地( “MyDatabase的”) {} } } ......而然后...... connectionStrings> –
2013-03-05 01:17:14