2013-07-19 2 views
2

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

Это моя строка соединения:

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

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

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

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

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

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

EDIT

SQL Server Addon and Settings

+1

AppHarbor поддерживает SQLExpress ?? – JayC

+0

@JayC Я не знаю, но не appharbor должен заменить мою строку соединения для своих, и мне просто нужно ввести мое имя контекста в поле псевдонима sql? – SOfanatic

+0

@SOfanatic Я думаю, вам нужно иметь правильное имя соединения, а также настроить для «app/plugin» (независимо от того, что его называет AppHarbor) для сервера MSSQL. Только после этого они заменят строку соединения. Быстрый тест для этого - попытаться напечатать 'ConfigurationManager.ConnectionStrings [" MyContext "]. ConnectionString' (используя Response.Write или некоторый контроллер/представление). – Alxandr

ответ

1

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

EDIT

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

0

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

config variables

Затем установить это «SQLSERVER_CONNECTION_STRING_ALIAS» для подключения имя -string (в вашем случае «MyContext» здесь:.

config-page

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

0

Ваше имя ConnectionString должно быть таким же, как псевдоним, т.е. «FinalProjectContext»

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

Тогда appharbor будет знать, чтобы обменять его на соответствующую одной :)

+0

Я знаю, что это была опечатка, я ее отредактирую. – SOfanatic

Смежные вопросы