Пример #1
0
        protected static long CalculateValue(DatabaseScriptType scriptType, int year, int month, int day, int hour, int minute, int second)
        {
            var branchNumber = (int)scriptType;

            var version = (branchNumber * 100000000000000L) +
                          (year * 10000000000L) +
                          (month * 100000000L) +
                          (day * 1000000L) +
                          (hour * 10000L) +
                          (minute * 100L) +
                          second;

            if (VersionBank == null)
            {
                VersionBank = new ConcurrentDictionary <long, DateTime>();
            }

            if (!VersionBank.ContainsKey(version))
            {
                VersionBank[version] = new DateTime(year, month, day, hour, minute, second);
            }

            return(version);
        }
        private static void ApplyMigrationUp(MigrateDatabaseContext dbContext, DatabaseScriptType scriptType, Assembly migrationAssembly)
        {
            using (var sw = new StringWriter())
            {
                var migRunner  = GetMigrationRunner(sw, dbContext, migrationAssembly);
                var migrations = migRunner.MigrationLoader.LoadMigrations();

                var printAtStart = false;
                foreach (var script in migrations)
                {
                    if (!script.Value.Version.ToString().StartsWith(((int)scriptType).ToString()))
                    {
                        continue;
                    }

                    var migrateAttr =
                        script.Value.Migration.GetType()
                        .GetCustomAttributes(typeof(BaseExtMgrAttribute), false)
                        .FirstOrDefault();

                    if (migrateAttr == null || migRunner.VersionLoader.VersionInfo.HasAppliedMigration(script.Value.Version))
                    {
                        continue;
                    }

                    // exclude invaild script
                    if (!ExtMigrationRunner.ValidScriptsStore.Contains($"{script.Value.Version}.{dbContext.DatabaseKey}"))
                    {
                        continue;
                    }

                    switch (scriptType)
                    {
                    case DatabaseScriptType.SqlDataStructureFunction:
                        if (!(migrateAttr is ExtMgrDataStructureAndFunctionsAttribute))
                        {
                            continue;
                        }
                        break;

                    case DatabaseScriptType.SqlStoredProcedures:
                        if (!(migrateAttr is ExtMgrStoredProceduresAttribute))
                        {
                            continue;
                        }
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(scriptType), scriptType, null);
                    }

                    if (!printAtStart)
                    {
                        Logger.InfoFormat($" > {scriptType.GetEnumDescription()}");
                        printAtStart = true;
                    }

                    Logger.InfoFormat($"   - {script.Value.Version} - {script.Value.Migration.GetType().Name} {(!((BaseExtMgrAttribute)migrateAttr).UseTransaction ? " -noTrans" : string.Empty)}");

                    migRunner.ApplyMigrationUp(script.Value, ((BaseExtMgrAttribute)migrateAttr).UseTransaction);
                }
            }
        }