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

Why is my MVC 5 application trying to access Local DB

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

有关的错误

The connection string specifies a local Sql Server Express instance using a database location within the application's App_Data directory

本来项目是有forms认证的,后来改成AspNetIdentity框架。我担心我从带有表单身份验证的初始模板中得到了一些残留物,尽管对应用程序进行了多次梳理并在谷歌上进行了长时间的搜索,但我还是找不到这些残留物。

这是连接字符串。没有其他人。至少在 Visual studio 中使用查找函数来查找 "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>

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

Default Role Provider could not be found.

看样子我不要了,看来,我想也许我不需要这一点。但是,如果我错了,请纠正我。

还有什么我应该看的吗?

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 之前开始查找此本地数据库。删除条目意味着它会尝试对条目进行罚款并失败。所以唯一的解决办法就是完全禁用它。