gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:42:42 25 4
gpt4 key购买 nike

我实现了 ASP.NET Identity,它在我的 App_Data 文件夹中自动创建了 ASPNETDB.MDF 和 aspnetdb_log.ldf。我的 SQL Express 实例(这是我所有其他表所在的位置)中已经有 AspNet 表(即 AspNetRoles、AspNetUsers 等)。据我所知,我的应用程序正在从 SQL Express 数据库而不是 ASPNETDB.MDF 读取和写入成员资格和角色数据。

我已将 web.config 中的连接字符串设置为:

<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 表单。

最佳答案

我遇到了完全相同的问题。我发现 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 中设置)。如果您还没有使用过成员(member)资格,那么可以按照 Lord nick 的建议进行操作(除了 clear/即可完成工作),只需在 web.config 中执行以下操作...

<connectionStrings>
<clear/>
<add name="DefaultConnection" connectionString="whatever" providerName="System.Data.SqlClient" />

但是,如果您像我一样以前运行过成员(member)资格 ( 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

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

关于asp.net - 如何停止在 LocalDB 中使用 ASPNETDB.MDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27540744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com