Как синхронизировать базу данных Code-first Entity Framework 4 с членством на удаленном сервере - PullRequest
0 голосов
/ 25 сентября 2011

Я начал создавать веб-приложение ASP net MVC 2.0 с использованием SQL Express 2008 R2.Я размещаю приложение на somee.com.

Я решил использовать Entity Framework 4 с реализацией базы данных в коде, чтобы можно было легко изменить дизайн.Локально работает, но когда я развертываю его на хост-провайдере, возникает много проблем.

Прежде всего, мне не удается повторно инициализировать базу данных, если модель изменилась, так как база данных наиболеесозданный заранее на сайте хостинга.Следовательно, у меня нет прав для этого.

Итак, я решил загрузить файл .mdf на моем локальном сервере SQLEXPRESS и отправить его на хост-сервер, но затем по какой-то причине яне могу подключиться к базе данных, когда я регистрирую нового пользователя с Членством.Вот где возникает исключение:

    _provider.CreateUser(userName, password, email, null, null, true, null, out status);

Ошибка:

Невозможно открыть базу данных "Люди", запрошенную при входе в систему.Ошибка входаНе удалось войти в систему для пользователя 'dalya'.

Теперь у меня возникает ощущение, что при получении файла mdf в папке DATA моего локального сервера SQL EXPRESS разрешения могут отличаться от разрешений, предоставленных большинством моих поставщиковкогда он прикрепил файл.Тем не менее, вот мой файл Web.config:

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=152368
  -->

<configuration>

  <connectionStrings>
    <!--
    <add name="People" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=People;" 
         providerName="System.Data.SqlClient" />
-->


    <add name="People"
       connectionString="Data source=PraxtPeople.mssql.somee.com;
                              packet size=4096;
                              user id=dalya;
                              pwd=********;
                              persist security info=False;
                              initial catalog=People;
                              "
       providerName="System.Data.SqlClient"/>


    </connectionStrings>

  <appSettings>
    <add key="DefaultConnectionString" value="People"/>
    <add key="webpages:Version" value="1.0.0.0"/>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  </appSettings>

  <system.web>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </assemblies>
    </compilation>

    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="People"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="People" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="People" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Может кто-нибудь подсказать мне, как решить эту проблему?Или кто-нибудь знает хорошего хост-провайдера, который разрешает реализацию платформы с кодом на основе сущности 4.0, где базы данных, использующие членство, могут быть без проблем воссозданы во время выполнения в случае изменения дизайна?

1 Ответ

1 голос
/ 31 января 2012

Попробуйте изменить persist security info=False; на persist security info=True;

...