我一直在我的本地机器上开发一个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="Data Source=tcp:xxxxx.database.windows.net,1433;Initial Catalog=xxxxx;User ID=xxxxx@xxxxx;Password=xxxxx"" 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>
但如果我这样做,我会收到错误:
找不到默认角色提供程序。
看来我似乎不想要一个,我想也许我不需要这一点。但如果我错了,请纠正我。
还有什么我应该看的吗?
答案 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
之前查看此本地数据库。删除条目意味着它尝试对条目进行细化并失败。因此,唯一的解决方案是完全禁用它。