семенной метод работает в локальной машине, но не аппхарбор


Мой метод seed отлично работает при запуске на моей локальной машине, но когда я толкаю свой код в appharbor, seed не работает.

Это моя строка подключения:

<connectionStrings>
    <add name="FinalProjectContext" connectionString="Data Source=.\SQLEXPRESS;User
Id=user;Password=pass;initial catalog=MyContextDB;" 
providerName="System.Data.SqlClient" />
</connectionStrings>

Мой метод seed находится внутри файла Configuration для миграции:

public Configuration()
{
    AutomaticMigrationsEnabled = true;
    AutomaticMigrationDataLossAllowed = true;
}

protected override void Seed(MyContext context)
{
   //add data
}

И я вызываю свой метод seed из класса context, внутри OnModelCreating:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
}

править

Надстройка и настройки SQL Server

3   2  

3 ответа:

После долгой отладки, поиска, тестирования и чтения проблема на самом деле не была связана с appharbor per say. Проект использует DBFactory для контекста, и именно здесь возникла проблема. В моей локальной машине EF вызывал инициализатор каждый раз, когда я запускал приложение, чтобы база данных была заполнена, но для того, чтобы это работало в app harbor, мне пришлось установить инициализатор в false (явно) в DBFactory конструктор.

править

Проблема идет еще дальше. Не знаю, как EF отслеживает это, но я думаю, что если я запускаю код локально, то база данных создается локально, и EF помечает миграцию как "выполненную", поэтому, когда я перемещаю код в Appharborit, он не заполняется. Единственный способ, который я нашел, чтобы решить эту проблему, - это удалить базу данных локально, а затем отправить ее в Appharbor.

Проблема, вероятно, в том, что ваша строка подключения не задана AppHarbor. Я не совсем уверен, как это сделать, но если вы перейдете на страницу конфигурации для MSSQL-"аддона" отсюда:

переменные конфигурации

Затем задайте "SQLSERVERCONNECTION_STRING_ALIAS" для вашего имени строки подключения (в вашем случае "MyContext" здесь:

конфигурации-страница

Это, вероятно, должно сделать трюк.

Ваше имя connectionstring должно совпадать с псевдонимом, т. е. "FinalProjectContext"

<add name="FinalProjectContext" connectionString="Data Source=.\SQLEXPRESS;UserId=user;Password=pass;initial catalog=MyContextDB;" providerName="System.Data.SqlClient" />

Тогда appharbor будет знать, чтобы поменять его на правильный:)