2013-07-19 36 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>()); 
} 

編輯

SQL Server Addon and Settings

+1

AppHarbor支持SQLExpress? – JayC

+0

@JayC我不知道,但不是appharbor應該替換我的連接字符串,我只需要在sql別名字段中輸入我的上下文名稱? – SOfanatic

+0

@SOfanatic我認爲你需要擁有正確的連接名稱,併爲MSSQL服務器設置「app/plugin」(AppHarbor稱之爲)。只有這樣他們纔會替換連接字符串。對此的快速測試是嘗試打印'ConfigurationManager.ConnectionStrings [「MyContext」] .ConnectionString'(使用Response.Write或某個控制器/視圖)。 – Alxandr

回答

1

大量的調試後,搜索,測試和閱讀,這個問題並沒有真正涉及到每appharbor說。該項目正在使用DBFactory作爲上下文,並且這是發生問題的地方。在我的本地機器中,每次啓動應用程序時,EF都會調用初始化程序,以便數據庫得到播種,但爲了在應用程序港中工作,我必須在DBFactory構造函數中將Initializer設置爲false(顯式)。

編輯

問題走得更遠。不知道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

相關問題