DefaultConnection и членство - каква е връзката между localsqlserver и defaultconnection

Хммм... Наистина не мога да разбера това.

В 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.

Това трябва да е толкова много, но трябва да съм го усложнил някак.

Благодаря за всяка помощ.

за разбирането

Ларси


person Larsi    schedule 03.08.2012    source източник
comment
използвайте sql_metal.exe, присъстващ в таблицата на .net framework, за да импортирате таблици във вашата база данни   -  person Waqar Janjua    schedule 03.08.2012
comment
sqlmetal msdn.microsoft.com/en-us/library/bb386987.aspx   -  person Waqar Janjua    schedule 03.08.2012
comment
@WaqarJanjua благодаря за коментара, но не трябва ли членството да създава таблиците автоматично? А какво да кажем за грешката LocalSqlServer?   -  person Larsi    schedule 03.08.2012
comment
Когато използваме контроли за влизане в asp.net, asp автоматично добавя нова база данни към нашата webconfig. За да добавим таблици за членство към съществуваща база данни, трябва да използваме sqlmetal.exe   -  person Waqar Janjua    schedule 03.08.2012


Отговори (3)


В следната публикация forumsasp се споменава, че добавянето на маркер </clear> преди вашия низ за връзка в елементът за членство и елементът rolemangaer (ако присъстват във вашия 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, за да добавите членски таблици към вашата съществуваща база данни.

person Waqar Janjua    schedule 03.08.2012
comment
здрасти Опитвам вашия подход, но досега е довел само до нов въпрос. stackoverflow.com/questions/11811978/ Всякакви идеи? - person Larsi; 05.08.2012

Настройките по подразбиране за всички уеб сайтове на Windows машини наследяват настройките на 2 конфигурационни файла: machine.config и web.config, които могат да бъдат намерени в директорията Windows/Microsoft.NET/Framework (или Framework64 за 64 бита)/version /config.

Ето фрагмент от версията по подразбиране на 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.

person Paul Keister    schedule 04.08.2012

Вече има регистриран доставчик на членство (в един от основните конфигурационни файлове), преди вашият конфигурационен файл да бъде зареден. Този доставчик на членство сочи към LocalSqlServer.

Ще трябва да премахнете първия доставчик на членство и това може да стане чрез изчистване на всички доставчици, преди да добавите такъв, точно както правите с вашите низове за връзка.

В раздела за конфигурация <system.web>, в раздела membership/providers, добавете елемент <clear> преди елемента(ите) <add>.

person Arjan Einbu    schedule 03.08.2012