每天将项目重新部署到生产服务器后,它会重建数据库中的两个表(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记录:
生产数据库中的最后10个_MigrationHistory记录:
答案 0 :(得分:2)
听起来您使用定义的EF上下文的不同版本有多个生产代码实例。如果是这种情况,请确保包含迁移脚本的DLL全部针对同一版本运行。否则,您将遇到描述数据库架构不断升级/降级的场景
您提到的版本不是包含CommissionsBase_New
和/或newDb_Configuration
,而是EntityFramework.dll
版本的程序集版本。
从您的日志中可以看出,您的应用程序有2个版本在生产中运行,这意味着您可能有2个(或更多)不同版本的生成程序集包含CommissionsBase_New
和/或{{1 }}