在我的本地计算机上运行时,我的种子方法运行得非常好,但当我将代码推送到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>());
}
修改
答案 0 :(得分:1)
经过大量的调试,搜索,测试和阅读后,问题并没有真正与appharbor相关。该项目正在使用DBFactory作为上下文,这就是问题发生的地方。在我的本地机器上,EF每次启动应用程序时都会调用Initializer,因此数据库会被播种,但是为了在app Harbor中工作,我必须在DBFactory构造函数中将Initializer设置为false(显式)。
修改强> 的
问题更进一步。不确定EF是如何跟踪这个但我认为如果我在本地运行代码然后数据库在本地创建并且EF将迁移标记为“已执行”,所以当我将代码移动到Appharborit时不会播种。我发现解决此问题的唯一方法是在本地删除数据库,然后将其推送到Appharbor。
答案 1 :(得分:0)
问题可能是您的连接字符串未由AppHarbor设置。我不完全确定如何确保它,但是如果你从这里转到MSSQL-“addon”的配置页面:
然后将“SQLSERVER_CONNECTION_STRING_ALIAS”设置为您的connection-string-name(在您的情况下为“MyContext”:
这应该可以解决问题。
答案 2 :(得分:0)
您的connectionstring名称应与别名相同,即“FinalProjectContext”
<add name="FinalProjectContext" connectionString="Data Source=.\SQLEXPRESS;UserId=user;Password=pass;initial catalog=MyContextDB;" providerName="System.Data.SqlClient" />
然后,appharbor会知道要换掉正确的那个:)