Exemple #1
0
        private void ExecuteMigrationScripts(IEnumerable <KeyValuePair <IMigrationScriptFile, string> > scripts, Action <DbTransaction, long> updateVersionAction)
        {
            foreach (var script in scripts)
            {
                IMigrationScriptFile currentScript = null;
                using (DbTransaction tran = this.Database.BeginTransaction())
                {
                    try
                    {
                        currentScript = script.Key;
                        Database.ExecuteScript(tran, script.Value);
                        updateVersionAction(tran, script.Key.Version);

                        var command = this.Database.CreateCommand();
                        command.CommandText = "SELECT @@TRANCOUNT";
                        command.Transaction = tran;

                        if (Convert.ToInt32(command.ExecuteScalar()) != 1)
                        {
                            throw new InvalidOperationException("There should be only one transaction running. Check the script for unclosed transactions!");
                        }

                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();

                        string filePath = (currentScript == null) ? "NULL" : currentScript.FilePath;
                        throw new MigrationException("Error executing migration script: " + filePath, filePath, ex);
                    }
                }
            }
        }
        private void ExecuteMigrationScripts(IEnumerable <KeyValuePair <IMigrationScriptFile, string> > scripts, Action <DbTransaction, long> updateVersionAction)
        {
            using (DbTransaction tran = Database.BeginTransaction())
            {
                IMigrationScriptFile currentScript = null;
                try
                {
                    foreach (var script in scripts)
                    {
                        currentScript = script.Key;
                        Database.ExecuteScript(tran, script.Value);
                        updateVersionAction(tran, script.Key.Version);
                    }

                    tran.Commit();
                }
                catch (Exception ex)
                {
                    tran.Rollback();

                    string filePath = (currentScript == null) ? "NULL" : currentScript.FilePath;
                    throw new MigrationException("Error executing migration script: " + filePath, filePath, ex);
                }
            }
        }
        /// <summary>
        /// Retrieves the latest migration script version from the migration directory.
        /// </summary>
        /// <returns>The latest script version</returns>
        private long GetLatestScriptVersion(DatabaseCommandArguments args)
        {
            IOrderedEnumerable <IMigrationScriptFile> files = _migrationDirectory.GetScripts(args)
                                                              .OrderByDescending(x => x.Version);

            IMigrationScriptFile latestFile = files.FirstOrDefault();

            if (latestFile != null)
            {
                return(latestFile.Version);
            }

            return(0);
        }