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); }