Хост-провайдер не разрешает удаленный доступ к базе данных. Переопределение метода Seed в Configuration.cs не работает

Мой хостинг-провайдер (www.binero.se) не разрешает удаленный доступ к своим базам данных, что затрудняет развертывание моего веб-приложения. Я должен опубликовать свое приложение MVC на своих серверах и просто надеюсь, что оно сработает. Приложение, которое я хочу развернуть, является стандартным приложением, которое вы получаете при создании нового приложения MVC в Visual Studio 2013. Я добавил миграцию в приложение, используя Enable-Migrations -EnableAutomaticMigrations. Я использую EF6 и MVC5. Сервер, к которому я пытаюсь получить доступ, — это MS SQL Server.

Мне нужно создать таблицы для AspNet Identity и, в конечном итоге, несколько других таблиц, но метод Initial Migration и Seed в Configuration.cs не вызываются. Как я понял, они должны вызываться и создавать и заполнять базу данных при доступе, поэтому я использую миграцию. Я попытался добавить ведение журнала Elmah для улучшения отчетов об ошибках, но, похоже, это работает только на моем локальном хосте. Если я попытаюсь получить доступ к /elmah.axd после возникновения исключения, сервер просто сообщит мне, что ресурс не существует. Втф? Я думал, что Эльма позаботится о маршрутизации.

Самое смешное, что ASP СОЗДАЕТ таблицы базы данных, если я не использую миграции и метод Seed. Другими словами: если я просто опубликую стандартное шаблонное приложение MVC и попытаюсь зарегистрироваться, оно создаст таблицы в базе данных и вставит новые зарегистрированные пользовательские данные. Это говорит нам о том, что в строке подключения все в порядке, верно? Так как же возможно, что IdentityDbContext может создавать таблицы и вставлять данные, но когда я пытаюсь выполнить Seed через Configuration.cs с помощью ApplicationContext (который происходит от IdentityDbContext), это не работает. Таблицы не создаются, данные не вставляются. Почему?! Я рвал на себе волосы 24 часа, пытаясь понять это. Помогите мне, пожалуйста.

В любом случае, когда я захожу в Аккаунт/Войти и ввожу свои учетные данные, он говорит:

"Миграция включена для контекста "ApplicationDbContext", но база данных не существует или не содержит сопоставленных таблиц. Используйте миграцию для создания базы данных и ее таблиц, например, запустив команду "Update-Database" из консоли диспетчера пакетов. ."

Я знаю, что его не существует! Вот почему мне нужно, чтобы вы запустили Initial_Create Migration!

Я также поковырялся и получил внутреннюю ошибку сервера (500), но я не могу отладить то, что происходит.

Configuration.cs

 internal sealed class Configuration : DbMigrationsConfiguration<UsersSeedMigrationCSharp.Models.ApplicationDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
    }

    protected override void Seed(UsersSeedMigrationCSharp.Models.ApplicationDbContext context)
    {
        var UserManager = new UserManager<ApplicationUser>(new
                    UserStore<ApplicationUser>(new ApplicationDbContext()));
        var RoleManager = new RoleManager<IdentityRole>(new
                            RoleStore<IdentityRole>(new ApplicationDbContext()));
        string password = "password";
        //Create Role Admin if it does not exist
        if (!RoleManager.RoleExists("admin"))
        {
            RoleManager.Create(new IdentityRole("admin"));
        }


        var user = new ApplicationUser { UserName = "admin" };
        var addresult = UserManager.Create(user, password);
        //Add User Admin to Role Admin
        if (addresult.Succeeded)
        {
            var result = UserManager.AddToRole(user.Id, "admin");
        }

Web.config:

<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=301880
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<sectionGroup name="elmah">
<section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup></configSections>
<connectionStrings>
<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-UsersSeedMigrationCSharp-20131217074025.mdf;Initial Catalog=aspnet-UsersSeedMigrationCSharp-20131217074025;Integrated Security=True" providerName="System.Data.SqlClient" />-->
<add name="DefaultConnection" connectionString="Data Source=XXX;Initial Catalog=XXXXX;Persist Security Info=True;User ID=XXX;Password=XXX" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<customErrors mode="Off"/>
<httpRuntime targetFramework="4.5" />
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules></system.web>
<system.webServer>
<modules>
<remove name="FormsAuthenticationModule" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /><add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" /><add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" /></modules>
<validation validateIntegratedModeConfiguration="false" /></system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<elmah>
<!--
See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
more information on remote access and securing ELMAH.
-->
<security allowRemoteAccess="true" />
</elmah><location path="elmah.axd" inheritInChildApplications="false">
<system.web>
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
<!-- 
See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for 
more information on using ASP.NET authorization securing ELMAH.

<authorization>
<allow roles="admin" />
<deny users="*" />  
</authorization>
-->  
</system.web>
<system.webServer>
<handlers>
<add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>
</system.webServer>
</location></configuration>

person Dennis Dyallo    schedule 17.12.2013    source источник
comment
У меня точно такая же проблема с Бинеро. Вы нашли какое-то решение??   -  person Thoast83    schedule 21.01.2014
comment
Нет, я сдался. Думаю, я просто скопировал строки из своей локальной БД в MS SQl Db на Binero. Извиняюсь   -  person Dennis Dyallo    schedule 22.01.2014


Ответы (1)


Это старая тема, но я попытаюсь объяснить кое-что.

В настоящее время Binero не поддерживает все возможности миграции. Первая миграция кода в режиме «отладки» стирает базу данных и создает новую с моделями в качестве ссылки. Binero этого не позволяет, потому что вы не можете стереть и создать свою базу данных (это делается в панели управления Binero). Вместо этого вам нужно указать Entity Framwork удалить все таблицы и создать новые таблицы в текущем подключении к базе данных.

Это ссылка, которая объясняет, как: http://www.binero.se/support/faq/webbdatabas/aspnet/hur-anvander-jag-aspnet-mvc3-ef-41-codefirst

И другие проблемы: Binero не поддерживает MVC5 и Entity Framework новее версии 4.1 (из того, что я прочитал на их веб-сайте http://www.binero.se/support/faq/webbdatabas/aspnet/vilka-komponenter-har-ni-installerade-i-er-windowsmiljo)

Обновление: даже крутые Binero не говорят, что поддерживают MVC5 или EF 6. Я обнаружил, что если вы настроите домен как .Net Framework 4.5.1 (или 4.5, я не помню, какой из них допустимая альтернатива) вы действительно можете опубликовать MVC 5 с EF6.

Я делал это сам пару раз, сложно только с Asp.Net Identity Version 1.0.0, поэтому я не могу гарантировать поддержку более новой версии.

person J.Olsson    schedule 06.03.2014