本地App_Data \ ASPNETDB.MDF不断创建

时间:2017-05-24 01:31:24

标签: asp.net-mvc visual-studio

编写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”,以便我的应用程序正常运行。

1 个答案:

答案 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中使用这些步骤:

  1. 在定义自己的连接字符串之前清除它们。

    <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>
    
  2. 在模块定义中删除RoleManager提供程序。

    <modules>
      <remove name="RoleManager" />
    </modules>
    
  3. 评论所有membershipprofile&amp;如果有必要,可以roleManager个元素。

  4. 如果您的帐户型号代码有UsersContext类,请确保它指向您自己定义的当前连接字符串。

    public class UsersContext : DbContext
    {
        public UsersContext() : base("ZZZ_SpringContext")
        {
        }
    }
    
  5. 相关问题:

    How do I stop using ASPNETDB.MDF in LocalDB?(WebForms版本)