为什么我的MVC 5应用程序试图访问本地数据库

时间:2015-06-23 13:57:33

标签: asp.net-mvc azure-sql-database localdb

我一直在我的本地机器上开发一个MVC 5应用程序,并且刚刚尝试向Azure公开测试版本,我发现了这个新错误。我的连接字符串没有引用LocalDB,我在代码中找不到任何想要创建或访问LocalDB的东西。然而,我收到了与尝试创建/访问localDB相关的错误:

  

连接字符串使用应用程序的App_Data目录中的数据库位置指定本地Sql Server Express实例

最初该项目有表单身份验证,但后来我改为AspNetIdentity框架。我担心我从初始模板中获得了一些带有表单身份验证的残留,尽管我已经多次将应用程序组合在一起并且谷歌上搜索了,但是我找不到。

以下是连接字符串。没有其他人。至少在Visual Studio中使用find函数来查找“connectionString” - 这就是全部:

<add name="elmah" connectionString="Data Source=tcp:xxxxx.database.windows.net,1433;Initial Catalog=xxxxx;User ID=xxxxx@xxxxx;Password=xxxxx" providerName="System.Data.SqlClient" />
<add name="IdentityDbContext" connectionString="Data Source=tcp:xxxxx.database.windows.net,1433;Initial Catalog=xxxxx;User ID=xxxxx@xxxxx;Password=xxxxx" providerName="System.Data.SqlClient" />
<add name="ORLODbContext" connectionString="metadata=res://*/ORLODbContext.csdl|res://*/ORLODbContext.ssdl|res://*/ORLODbContext.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=tcp:xxxxx.database.windows.net,1433;Initial Catalog=xxxxx;User ID=xxxxx@xxxxx;Password=xxxxx&quot;" providerName="System.Data.EntityClient" />

我的谷歌搜索让我将这些其他功能添加到web.config。在system.web

<authentication mode="None" />
<membership>
  <providers>
    <clear />
  </providers>
</membership>
<profile>
  <providers>
    <clear />
  </providers>
</profile>

在这里,我的谷歌搜索也建议我添加:

<roleManager>
  <providers>
    <clear />
  </providers>
</roleManager>

但如果我这样做,我会收到错误:

  

找不到默认角色提供程序。

看来我似乎不想要一个,我想也许我不需要这一点。但如果我错了,请纠正我。

还有什么我应该看的吗?

1 个答案:

答案 0 :(得分:2)

Asp.Net默认使用角色管理器,即使在使用Identity时也是如此。解决方案是完全禁用它。在web.config中删除整个roleManager部分,并将其替换为:

<roleManager enabled="false" />

有关更多信息,请在machine.config中找到这样一行:

<add name="AspNetSqlRoleProvider"
    connectionStringName="LocalSqlServer" applicationName="/" type="..."/>

这样的连接字符串:

<add name="LocalSqlServer" 
    connectionString="...localdb..." 
    providerName="System.Data.SqlClient"/>

因此,将角色管理器条目留在那里使Asp.Net开始在IdentityDbContext之前查看此本地数据库。删除条目意味着它尝试对条目进行细化并失败。因此,唯一的解决方案是完全禁用它。