4

嗯......我真的无法理解这个。

在 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,那么这应该如何工作?

我想要的只是在与模型上下文创建的表相同的数据库中获取成员表。

这应该是如此oob,但我一定是在某种程度上过于复杂了。

谢谢你的帮助。

问候

拉尔西

4

3 回答 3

6

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

以下是 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>

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

于 2012-08-04T05:40:56.383 回答
3

在以下帖子论坛中提到,</clear>成员元素和角色管理器元素(如果存在于 web.config)中的连接字符串之前 添加标签将解决问题。

<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 将成员表添加到现有数据库中。

于 2012-08-03T19:48:49.123 回答
2

在您的配置文件加载之前,已经注册了一个membershipprovider(在一个根配置文件中)。该membershipprovider 指向LocalSqlServer。

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

<system.web>配置部分中,在该部分内,在元素之前membership/providers添加一个元素。<clear><add>

于 2012-08-03T19:55:38.117 回答