Entity Framework 6 Автоматическая миграция периодически перестраивает таблицы на производственном сервере - PullRequest
0 голосов
/ 14 мая 2018

После ежедневного повторного развертывания моего проекта на рабочем сервере он перестраивает две таблицы в базе данных (BatchImportDatas и BatchImportLogs), удаляя все данные в этих таблицах. Однако это не происходит в моей базе данных dev и происходит только в двух таблицах, хотя многие другие таблицы в приложении также управляются автоматической миграцией 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 в базе данных Dev:

Last 10 _MigrationHistory records in Dev Database:

Последние 10 записей _MigrationHistory в производственной базе данных:

Last 10 _MigrationHistory records in Production Database:

1 Ответ

0 голосов
/ 14 мая 2018

Похоже, у вас есть несколько экземпляров вашего производственного кода, использующих разные версии определенного вами контекста EF. Если это так, убедитесь, что все DLL-библиотеки, содержащие ваши сценарии миграции, работают с одной и той же версией. В противном случае вы столкнетесь с описанным вами сценарием, в котором схема базы данных постоянно обновляется / понижается

Упомянутая вами версия - это не версия вашей сборки, которая содержит вашу CommissionsBase_New и / или вашу newDb_Configuration, а версия EntityFramework.dll.

Из ваших журналов ясно, что в работе работают 2 версии вашего приложения, что означает, что вы, вероятно, имеете 2 (или более) разных версий созданной сборки, содержащей ваши CommissionsBase_New и / или newDb_Configuration* 1010. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...