基础提供程序无法打开,用户IIS APPPOOL登录失败

时间:2012-06-05 12:19:50

标签: sql-server-2008 entity-framework ef-code-first

我不是一个sql服务器人,但我正在研究客户端的应用程序,并希望首先通过EF代码连接到数据库

我拥有的异常消息是

  

底层提供商无法打开

例外详情

  

无法打开登录请求的数据库[DatabaseName]。登录失败

     

用户'IIS APPPOOL \ ASP.NET v4.0“

登录失败

我的网络配置

<add name="TraininGoDB"
    providerName="System.Data.SqlClient"
    connectionString="Server=LOCALPCNAME\SQLEXPRESS;Database=[DATABASENAME];Integrated Security=True;"/>

EF上下文和实体在一个单独的项目中使用以下应用配置进行定义

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
</configuration>

我正在使用SQL Server Express 2008

不知道数据库配置或Web配置中的问题

2 个答案:

答案 0 :(得分:1)

运行Web应用程序池(与Web应用程序关联)的用户无权访问您的数据库。您需要授予其权限或在具有权限的其他用户下运行。因此,总结一下:检查您的应用程序池正在运行的用户,然后检查该用户是否有权访问您的数据库。

答案 1 :(得分:0)

如果所有Web.config文件都正确,SQLSERVER具有相应的权限等,您还可以检查一件事。我曾经遇到过这个问题,当客户让我配置项目时,实体框架不会自动删除数据库(例如,如果模型已更改),但我仍然在localhost上测试项目。因此我需要创建一个新的数据库,但我忘了修复我的上下文文件。例如,我的问题是:

public MasterContext(string nameOrConnectionString) : base(nameOrConnectionString)
    {
        Database.SetInitializer<MasterContext>(null);
    }

应该是( 用于测试 ):

public MasterContext(string nameOrConnectionString) : base(nameOrConnectionString)
    {
        Database.SetInitializer<MasterContext>(new DropCreateDatabaseIfModelChanges<MasterContext>());

    }

否则,我会收到相同的错误,即底层提供程序在打开时失败,内部异常是用户登录失败。