2

在我的本地机器上运行时,我的种子方法工作得非常好,但是当我将代码推送到 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 插件和设置

4

3 回答 3

1

经过大量的调试、搜索、测试和阅读,问题与 appharbor 无关。该项目使用 DBFactory 作为上下文,这就是问题发生的地方。在我的本地机器上,EF 每次启动应用程序时都会调用 Initializer,以便为数据库播种,但为了使其在 app Harbor 中工作,我必须在 DBFactory 构造函数中将 Initializer 设置为 false(显式)。

编辑

问题更进一步。不确定 EF 是如何跟踪这一点的,但我认为如果我在本地运行代码,那么数据库会在本地创建,并且 EF 将迁移标记为“已执行”,因此当我将代码移动到 Appharborit 时不会播种。我发现解决此问题的唯一方法是在本地删除数据库,然后将其推送到 Appharbor。

于 2013-07-22T19:46:26.633 回答
0

问题可能是您的连接字符串不是由 AppHarbor 设置的。我不完全确定如何确保它确实如此,但如果你从这里转到 MSSQL-“插件”的配置页面:

配置变量

然后将“SQLSERVER_CONNECTION_STRING_ALIAS”设置为您的连接字符串名称(在您的情况下为“MyContext”:

配置页面

那应该可以解决问题。

于 2013-07-22T12:55:03.400 回答
0

您的连接字符串名称应与别名相同,即“FinalProjectContext”

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

然后 appharbor 会知道把它换成合适的:)

于 2013-07-22T18:32:53.593 回答