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

Win*_*oek 6 sql-server asp.net 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" />
Run Code Online (Sandbox Code Playgroud)

但是,如果我从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表单.

cla*_*ica 5

我遇到了完全相同的问题。我发现 VS 烦人地从 machine.config 中提取配置设置,它位于项目之外,在我的例子中......

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

为...建立连接

       <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>
Run Code Online (Sandbox Code Playgroud)

..(也在 machine.config 中设置)。如果您还没有使用过会员资格,那么按照尼克勋爵的建议去做就可以了(除了clear/将完成这项工作),并且只需在web.config中执行以下操作...

<connectionStrings>
   <clear/>
   <add name="DefaultConnection" connectionString="whatever" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)

但是,如果您像我一样以前运行过会员资格 ( 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>
-->
Run Code Online (Sandbox Code Playgroud)

...因为 AspNet Identity 2 不再需要所有这些东西。

我还必须将以下内容添加到我的 web.config 中:

<modules>
 <remove name="RoleManager"/>
</modules>
Run Code Online (Sandbox Code Playgroud)

...根据这个答案:在运行 .NET 4 的 IIS 7 上找不到默认角色提供程序

我希望我曾经救过某人。这花了我好几个小时才完成。


asd*_*hak 0

看来你的 web.config 中有类似的东西

<add name="DefaultConnectionForLocalDb" connectionString="Data Source=(LocalDb)\v11.0;..."; />
Run Code Online (Sandbox Code Playgroud)

在您的AccountModels.cs文件中,您有:

public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnectionForLocalDb")
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

不过应该是这样的:

<add name="DefaultConnectionForSQLEXPRESS" connectionString="data source=.\SQLEXPRESS;...;" />

public class UsersContext : DbContext
{
    public UsersContext()
        : base("DefaultConnectionForSQLEXPRESS")
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以安全地删除DefaultConnectionForLocalDb来自您web.configASPNETDB.MDF来自至的条目App_Data