DefaultConnection和membership - localsqlserver和defaultconnection之间的连接是什么

时间:2012-08-03 18:40:45

标签: asp.net entity-framework asp.net-membership connection-string

嗯......我真的无法理解这一点。

在web.config中我有:

<connectionStrings>
   <clear /> <!--- need this to prevent using LocalSqlServer from machine.config or somewhere becouse it is not present when when publish to hosting -->
   <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-Goaly-20120615111028;Integrated Security=SSPI" />  
</connectionStrings>

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <!-- I think this line is telling asp.net that I want the membership working agains defaultconnection, and not LocalSqlServer connection????? -->
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

然后它抱怨:

The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.

当我在设置选项卡中使用VS2012 RC的发布时,我得到一个ModelContext和一个DefaultConnection,那么它应该如何工作呢?

我想要的只是将成员资格表与modelcontext创建的表格放在同一个数据库中。

这应该是如此,但我必须过分复杂一些。

感谢您的帮助。

此致

Larsi

3 个答案:

答案 0 :(得分:6)

Windows机器上所有网站的默认设置都继承了2个配置文件的设置:machine.config和web.config,可以在Windows / Microsoft.NET / Framework目录(或64位Framework64)中找到)/版本/配置。

以下是machine.config默认版本的代码段:

<system.web>
    <processModel autoConfig="true"/>
    <httpHandlers/>
    <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>

所以问题的答案是:machine.config建立了与LocalSqlServer连接的依赖关系。当您添加<clear/>标记作为此问题建议的其他答案时,您将删除对名为AspNetSqlMembershipProvier的成员资格提供程序的引用,并将其引用到LocalSqlServer

答案 1 :(得分:3)

以下帖子forumsasp中提及 在成员元素和rolemangaer元素(如果存在于web.config中)中的连接字符串之前添加</clear>标记将解决问题。

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
   <clear/> <!-- solves the issue -->    
   <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

您也可以使用SqlMetal.exe将成员资格表添加到现有数据库中。

答案 2 :(得分:2)

在加载配置文件之前,已经注册了一个memberhipprovider(在其中一个根配置文件中)。 membershippprovider指向LocalSqlServer。

您需要删除第一个成员提供者,这可以通过在添加提供者之前清除所有提供者来完成,就像您对连接字符串一样。

<system.web>部分的membership/providers部分内,在<clear>元素之前添加<add>元素。