public static T Execute <T>( this IDataCommandScope scope, Action <DataCommandBuilder> configure, Func <IDataCommandBuilder, T> execute) { Check.NotNull(nameof(scope), scope); Check.NotNull(nameof(configure), configure); Check.NotNull(nameof(execute), execute); try { var statement = new DataCommandBuilder(); configure(statement); scope.OnNext(statement); return(execute(statement)); } catch { scope.OnError(null); throw; } finally { scope.OnCompleted(); } }
public static T Try <T>( this IDataCommandScope scope, Func <IDataConnection, T> execute) { Check.NotNull(nameof(scope), scope); Check.NotNull(nameof(execute), execute); IDataTransaction tx = null; try { DataConnection c = null; if (scope is DataTransaction transaction) { c = (DataConnection)transaction.Connection; transaction.SetAutoCommit(true); tx = transaction; } else if (scope is DataConnection connection) { c = connection; } if (c.State != ConnectionState.Open) { c.SetAutoClose(true); c.Open(); } return(execute(c)); } catch { tx?.OnError(null); scope.OnError(null); throw; } finally { tx?.OnCompleted(); scope.OnCompleted(); } }
public static void Use( this IDataCommandScope scope, Action <IDataConnection> execute) { Check.NotNull(nameof(scope), scope); Check.NotNull(nameof(execute), execute); IDataTransaction tx = null; try { DataConnection c = null; if (scope is DataTransaction transaction) { c = (DataConnection)transaction.Connection; transaction.SetAutoCommit(true); tx = transaction; } else if (scope is DataConnection connection) { c = connection; } execute(c); } catch { tx?.OnError(null); scope.OnError(null); throw; } finally { tx?.OnCompleted(); scope.OnCompleted(); } }