c# - Entity Framework 6 自动迁移在生产服务器上定期重建表
问题描述
每天将我的项目重新部署到生产服务器后,它会重建数据库中的两个表(BatchImportDatas 和 BatchImportLogs),删除这些表中的所有数据。但是,这不会发生在我的开发数据库上,并且仅发生在两个表上,尽管应用程序中的许多其他表也由 EF 6 自动迁移管理。由于我使用的是自动迁移,因此在应用程序的迁移文件夹中没有生成迁移文件,但是我确信 EF 迁移是罪魁祸首,因为发生这种情况时,在 _MigrationHistory 表中输入了迁移条目。我已经删除了 _MigrationHistory 表中的所有相关记录,并强制重建受影响的数据库表,但这并没有解决这个问题。我不想删除所有迁移记录并重建整个生产数据库,因为部分应用程序正在使用中,而数据库中的其他表包含实时数据。以下是我的项目的 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>());
}
}
}
开发数据库中的最后 10 条 _MigrationHistory 记录:
生产数据库中的最后 10 条 _MigrationHistory 记录:
解决方案
听起来您有多个使用定义的 EF 上下文版本的生产代码实例。如果是这种情况,请确保包含迁移脚本的 DLL 都针对同一版本运行。否则,您将遇到您描述的数据库架构不断升级/降级的场景
您提到的版本不是包含您的CommissionsBase_New
和/或您的程序集newDb_Configuration
的版本,而是EntityFramework.dll
版本。
从您的日志中可以清楚地看出,您的应用程序有 2 个版本在生产中运行,这意味着您可能有 2 个(或更多)不同版本的生成程序集,其中包含您的CommissionsBase_New
和/或newDb_Configuration
推荐阅读
- ios - 如何找到 iPhone 应用程序的 SDK 版本
- google-closure-compiler - 防止编译器将代码从一个块移动到另一个块?
- javascript - 从对象中获取值到数组中
- java - 将页面添加到 Spring Boot 应用程序(非常基础)
- javascript - Angular 6:重新加载窗口(刷新 F5)在 IE11 中需要一个额外的“/”来重新加载当前路径
- php - 没有链接参数的mysqli_query
- firebase - Firebase Auth API 电子邮件验证 JavaScript
- react-native - 已安装库但在 react-native 环境中不起作用
- scala - 如何加入数据框中的数据
- android - 从通知操作启动后台服务的白名单对开发人员真正意味着什么?