我实现了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:一个或多个文件与数据库的主文件不匹配。如果您尝试附加数据库,请使用正确的文件重试该操作。如果这是现有数据库,则该文件可能已损坏,应从备份中恢复。 无法打开用户默认数据库。登录失败。 用户&#39; MyComputerName \ MyUserName&#39;登录失败。 日志文件&#39; C:\ Users \ MyProjectName \ App_Data \ aspnetdb_log.ldf&#39;与主文件不匹配。它可能来自不同的数据库,或者以前可能已重建日志
将ASPNETDB.MDF添加回App_Data后,错误就消失了。
我搜索了解决方案中的所有代码,但没有引用ASPNETDB。那为什么还要继续读它?
我正在.Net 4.5上开发ASP.NET Web表单。
答案 0 :(得分:2)
我遇到了自动创建ASPNETDB.MDF的问题,即使我使用Asp.Net Identity作为主要用户管理。
我通过从web.config中删除以下行来解决它:
<roleManager enabled="true" />
这个告诉ASP.NET使用旧的ASP.NET成员资格用户管理,ASP.NET身份不支持。
答案 1 :(得分:1)
我遇到了完全相同的问题。我发现VS烦人地从machine.config中提取配置设置,该设置位于项目之外,在我的情况下...
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
Identity 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中设置)。如果没有使用会员资格,那么可以按照Lord昵称建议(除了明确/将完成工作)并在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
我希望我能节省一些时间。这花了我几个小时才能解决问题。
答案 2 :(得分:0)
您的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")
{
}
}
然后,您可以安全地从DefaultConnectionForLocalDb
和web.config
将ASPNETDB.MDF
条目从App_Data
移除。
答案 3 :(得分:0)
我不知道你是否已经弄清楚这一点,但你可以尝试的其中一件事是:在web.config
,connections
部分,添加<Clear/>
然后{ {1}}
显然,如果您不更改/删除<Remove Name=LocalSqlServer/>
,仍会尝试连接到aspnetdb.mdf。
您可能还会考虑在LocalSqlServe
中添加并指向您的SqlExpress或SqlServer。