首页 > 解决方案 > 实体框架的大迁移文件导致无法将更改发布到实时服务器

问题描述

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

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

我尝试将我的开发环境指向生产数据库并运行Update-Database -Verbose -TargetMigration PendingMigration_2,结果相同,但这次我知道导致故障的罪魁祸首迁移。

它只是需要在现有表中添加的列数。

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));
            .
            .
            .
        }

我的限制是这个 WebApp 部署在 GoDaddy 上的共享服务器上。我无法更改数据库Transaction log size,也无法更改Recovery Mode数据库。

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

标签: entity-frameworkentity-framework-migrations

解决方案


如果您的意思是中断迁移,是 {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));
    }

推荐阅读