编写MVC5应用程序。由于某种原因,仍在创建本地App_Data \ ASPNETDB.MDF数据库,即使在我的web.config中,我指定的唯一数据库是网络上完全不同的数据库(并且工作正常。)什么可以创建此数据库(并重新创建,如果我删除它)?我在我的解决方案中搜索了ASPNETDB.MDF并且没有出现任何内容,所以它不在任何类型的配置文件等中....
我的web.config的connectionStrings部分....
<connectionStrings>
<remove name="ZZZ_SpringContext" />
<add name="ZZZ_SpringContext"
connectionString="Data Source=mypc\sql2012;Initial Catalog=ZZZ_Spring;Integrated Security=True;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
*****更新*****
我再次尝试删除数据库。然后在我的web.config中,我将rolemanager行更改为false,并且db现在没有重新创建。这有助于我了解创建数据库的内容。但是,我怎么能解决这个问题呢?这是web.config中的行....
<roleManager enabled="false" />
我不得不将其更改为“true”,以便我的应用程序正常运行。
答案 0 :(得分:2)
在过去,我遇到了几乎同样的问题,ASPNETDB.mdf文件仍在重新创建,即使它已被删除。转而ASP.NET Identity实例在项目外部使用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
元素,它似乎控制了Membership
提供者的行为:
<system.web>
<membership>
<providers>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
</providers>
</membership>
<profile>
<providers>
<add name="AspNetSqlProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</profile>
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="AspNetWindowsTokenRoleProvider" applicationName="/" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
</system.web>
请注意,connectionStringName="LocalSqlServer"
引用ASPNETDB.mdf,如之前的connectionStrings
元素所示。
然后,在项目内的web.config中,此行确定是否启用了RoleManager
实例:
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
</providers>
</roleManager>
上面给出的行表明ASP.NET成员资格提供程序已启用为当前用户管理,这违背了ASP.NET身份的目的。
因此,如果ASPNETDB.mdf数据库不存在&amp; Membership
提供程序支持已启用,Membership
提供程序将使用machine.config中的默认配置设置进行初始化,并使用默认表定义自动生成ASPNETDB.mdf及其日志文件。
为了防止重新创建该数据库,除了更改<roleManager enabled="false">
之外,您还可以在web.config中使用这些步骤:
在定义自己的连接字符串之前清除它们。
<connectionStrings>
<clear />
<remove name=LocalSqlServer /> <== this is maybe optional
<add name="ZZZ_SpringContext"
connectionString="Data Source=mypc\sql2012;Initial Catalog=ZZZ_Spring;Integrated Security=True;MultipleActiveResultSets=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
在模块定义中删除RoleManager
提供程序。
<modules>
<remove name="RoleManager" />
</modules>
评论所有membership
,profile
&amp;如果有必要,可以roleManager
个元素。
如果您的帐户型号代码有UsersContext
类,请确保它指向您自己定义的当前连接字符串。
public class UsersContext : DbContext
{
public UsersContext() : base("ZZZ_SpringContext")
{
}
}
相关问题:
How do I stop using ASPNETDB.MDF in LocalDB?(WebForms版本)