我实现了ASP.NET Identity,它自动在我的App_Data文件夹中创建了ASPNETDB.MDF和aspnetdb_log.ldf。我的SQL Express实例(我的所有其他表都位于其中)中已经有了AspNet表(即AspNetRoles、AspNetUsers等)。据我所知,我的应用程序正在从SQL Express数据库而不是ASPNETDB.MDF读取和写入成员资格和角色数据。
我已经将web.config中的connectionString设置为:
<add name="DefaultConnection" connectionString="Data Source=MyComputerName\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True" providerName="System.Data.SqlClient" />但是,如果从App_Data中删除ASPNETDB.MDF,则在登录时会出现以下错误:
异常详细信息: System.Data.SqlClient.SqlException:一个或多个文件与数据库的主文件不匹配。如果您正在尝试附加数据库,请使用正确的文件重试该操作。如果这是现有数据库,则文件可能已损坏,应从备份中还原。无法打开用户默认数据库。登录失败。用户'MyComputerName\MyUserName‘登录失败。日志文件'C:\Users\MyProjectName\App_Data\aspnetdb_log.ldf‘与主文件不匹配。该日志可能来自不同的数据库,也可能先前已重新构建过
一旦我将ASPNETDB.MDF添加回App_Data,这个错误就消失了。
我已经搜索了我的解决方案中的所有代码,它没有引用ASPNETDB。那么,为什么它还在试图从中读取数据呢?
我正在.Net 4.5上开发ASP.NET web表单。
发布于 2016-09-06 13:19:38
我也遇到了同样的问题。我发现VS恼人地从machine.config获取配置设置,它位于项目之外,在我的例子中...
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.configIdentity 2.0在machine.config中使用了以下连接字符串...
<connectionStrings>
<add name="LocalSqlServer" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>要为...设置连接,请执行以下操作
<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, ........" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
</providers>
</membership>。。(也是在machine.config中设置的)。如果你还没有使用会员制,那么可以按照尼克勋爵的建议去做(除了那些明确的/将会做这项工作的人),然后在web.config中简单地做以下事情……
<connectionStrings>
<clear/>
<add name="DefaultConnection" connectionString="whatever" providerName="System.Data.SqlClient" />
但是,如果您像我一样,以前有成员运行(https://msdn.microsoft.com/en-us/library/6e9y4s5t(v=vs.100).aspx,您将需要从machine.config中注释掉或删除以下部分...
<!--
<membership>
<providers>
...
</providers>
</membership>
<profile>
<providers>
...
</providers>
</profile>
<roleManager>
<providers>
..
</providers>
</roleManager>
-->..。因为AspNet Identity 2不再需要所有这些东西。
我还必须在我的web.config中添加以下内容:
<modules>
<remove name="RoleManager"/>
</modules>..。根据这个答案:Default Role Provider could not be found on IIS 7 running .NET 4
我希望我为某人节省了一些时间。这花了我好几个小时才弄明白。
发布于 2015-09-16 02:53:17
我在自动创建ASPNETDB.MDF时遇到了同样的问题,即使我使用Asp.Net Identity作为主要用户管理。
我通过从web.config中删除以下代码行解决了这个问题:
<roleManager enabled="true" />这个命令告诉ASP.NET使用旧的ASP.NET成员用户管理,这是ASP.NET Identity不支持的。
发布于 2014-12-18 15:04:25
看起来你的web.config里有像这样的东西
<add name="DefaultConnectionForLocalDb" connectionString="Data Source=(LocalDb)\v11.0;..."; />在您的AccountModels.cs文件中,您拥有:
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnectionForLocalDb")
{
}
}但是,应该是这样的:
<add name="DefaultConnectionForSQLEXPRESS" connectionString="data source=.\SQLEXPRESS;...;" />
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnectionForSQLEXPRESS")
{
}
}然后,您可以安全地从web.config中删除DefaultConnectionForLocalDb条目,并将ASPNETDB.MDF从App_Data中删除。
https://stackoverflow.com/questions/27540744
复制相似问题