семенной метод работает в локальной машине, но не аппхарбор
Мой метод 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>());
}
править
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 будет знать, чтобы поменять его на правильный:)