实体框架6自动迁移在生产服务器上定期重建表

时间:2018-05-14 16:34:11

标签: c# winforms entity-framework

每天将项目重新部署到生产服务器后,它会重建数据库中的两个表(BatchImportDatas和BatchImportLogs),删除这些表中的所有数据。但是,这不会发生在我的dev数据库上,只会发生在两个表上,尽管应用程序中的许多其他表也由EF 6自动迁移管理。由于我使用自动迁移,因此不会在应用程序的迁移文件夹中生成迁移文件,但我确定EF迁移是罪魁祸首,因为在发生这种情况时会在_MigrationHistory表中输入迁移条目。我删除了_MigrationHistory表中的所有相关记录,并强制重建受影响的数据库表,但这并未解决此问题。我不想删除所有迁移记录并重建整个生产数据库,因为部分应用程序正在使用中,而db中的其他表包含实时数据。以下是我的项目的EF配置详细信息。非常感谢任何建议,谢谢。

迁移配置文件:

namespace SYSTEM_Base.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class newDb_Configuration : DbMigrationsConfiguration<SYSTEM_Base.Entities.Commissions.CommissionsBase_New>
    {
        public newDb_Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = false;
        }

        protected override void Seed(SYSTEM_Base.Entities.Commissions.CommissionsBase_New context)
        {
            //context.Database.ExecuteSqlCommand("DBCC CHECKIDENT('BatchImportLogs', RESEED, 1000);");
        }
    }
}

DbContext(数据库核心配置):

using SYSTEM_Base.Migrations;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Providers.Entities;
using System.Web.Security;

namespace SYSTEM_Base.Entities.Commissions
{
        public class CommissionsBase_New : DbContext
        {
            public CommissionsBase_New() : base("SYSTEM") { }

            public DbSet<MembershipAddProperty> MembershipAddProperties { get; set; }

            public DbSet<AppSetting> AppSettings { get; set; }

            public DbSet<ReportRoleLevel> ReportRoleLevels { get; set; }

            public DbSet<ResetPasswordRequest> ResetPasswordRequests { get; set; }

            public DbSet<BatchImportData> BatchImportData { get; set; }

            public DbSet<BatchImportLog> BatchImportLog { get; set; }

            protected override void OnModelCreating(DbModelBuilder builder)
            {
                Database.SetInitializer(new MigrateDatabaseToLatestVersion<CommissionsBase_New, newDb_Configuration>());
            }
        }
}

Dev Database中的最后10个_MigrationHistory记录:

Last 10 _MigrationHistory records in Dev Database:

生产数据库中的最后10个_MigrationHistory记录:

Last 10 _MigrationHistory records in Production Database:

1 个答案:

答案 0 :(得分:2)

听起来您使用定义的EF上下文的不同版本有多个生产代码实例。如果是这种情况,请确保包含迁移脚本的DLL全部针对同一版本运行。否则,您将遇到描述数据库架构不断升级/降级的场景

您提到的版本不是包含CommissionsBase_New和/或newDb_Configuration,而是EntityFramework.dll版本的程序集版本。

从您的日志中可以看出,您的应用程序有2个版本在生产中运行,这意味着您可能有2个(或更多)不同版本的生成程序集包含CommissionsBase_New和/或{{1 }}