如何在LocalDB中停止使用ASPNETDB.MDF?

时间:2014-12-18 06:52:15

标签: asp.net sql-server webforms .net-4.5 asp.net-identity

我实现了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表单。

4 个答案:

答案 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")
    {
    }
}

然后,您可以安全地从DefaultConnectionForLocalDbweb.configASPNETDB.MDF条目从App_Data移除。

答案 3 :(得分:0)

我不知道你是否已经弄清楚这一点,但你可以尝试的其中一件事是:在web.configconnections部分,添加<Clear/>然后{ {1}}

显然,如果您不更改/删除<Remove Name=LocalSqlServer/>,仍会尝试连接到aspnetdb.mdf。

您可能还会考虑在LocalSqlServe中添加并指向您的SqlExpress或SqlServer。