实体框架的大型迁移文件导致无法将更改发布到实时服务器上

时间:2019-07-19 09:23:20

标签: entity-framework entity-framework-migrations

在开发过程中进行了许多更改之后,还包括一些数据库迁移。当我尝试将它们发布到生产服务器时,会引发以下错误。

  

由于“ ACTIVE_TRANSACTION”,数据库“ XXXX”的事务日志已满。   该声明已终止。

我尝试将开发环境指向生产数据库,并运行navigationBar,结果相同,但是这次我知道导致迁移的罪魁祸首。

只不过需要在现有表中添加的列数。

Update-Database -Verbose -TargetMigration PendingMigration_2

我的限制是,此WebApp部署在GoDaddy的共享服务器上。我无法更改数据库public partial class fields_added_for_UKAS_calcert : DbMigration { public override void Up() { AddColumn("dbo.Asset_Calcert", "UKAS_readings_taken_status", c => c.Int(nullable: false, defaultValue: 0)); AddColumn("dbo.Asset_Calcert", "weight_class_m1_1", c => c.Boolean(nullable: false)); AddColumn("dbo.Asset_Calcert", "weight_class_m1_2", c => c.Boolean(nullable: false)); AddColumn("dbo.Asset_Calcert", "weight_class_e2", c => c.Boolean(nullable: false)); AddColumn("dbo.Asset_Calcert", "weight_class_f1", c => c.Boolean(nullable: false)); AddColumn("dbo.Asset_Calcert", "make", c => c.String()); AddColumn("dbo.Asset_Calcert", "device_range", c => c.Int(nullable: false, defaultValue: 0)); . . . } ,也无法更改数据库的Transaction log size

是否可以将这种巨大的迁移分成目标服务器可以接受的较小块。否则任何解决方案都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的意思是中断迁移,请{x}在每次迁移中添加列,然后通过添加{x}列来构建迁移,然后再次添加{x}列,然后进行迁移,直到完成。

public partial class fields_added_for_UKAS_calcert_part1 : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Asset_Calcert", "UKAS_readings_taken_status", c => c.Int(nullable: false, defaultValue: 0));
        AddColumn("dbo.Asset_Calcert", "weight_class_m1_1", c => c.Boolean(nullable: false));
    }

public partial class fields_added_for_UKAS_calcert_part2 : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Asset_Calcert", "weight_class_m1_2", c => c.Boolean(nullable: false));
        AddColumn("dbo.Asset_Calcert", "weight_class_e2", c => c.Boolean(nullable: false));
    }