public EtlTransactionScope(IEtlContext context, IProcess process, TransactionScopeKind kind, TimeSpan scopeTimeout, LogSeverity logSeverity) { Context = context; Process = process; Kind = kind; LogSeverity = logSeverity; Timeout = scopeTimeout; if (Kind == TransactionScopeKind.None) { return; } var previousId = Transaction.Current?.ToIdentifierString(); if (Kind == TransactionScopeKind.Suppress && previousId == null) { return; } _scope = new TransactionScope((TransactionScopeOption)Kind, scopeTimeout); var newId = Transaction.Current?.ToIdentifierString(); var iocUid = 0; switch (kind) { case TransactionScopeKind.RequiresNew: iocUid = Context.RegisterIoCommandStart(Process, IoCommandKind.dbTransaction, null, null, "new transaction started", newId, null, "new transaction started"); break; case TransactionScopeKind.Required: iocUid = previousId == null || newId != previousId ? Context.RegisterIoCommandStart(Process, IoCommandKind.dbTransaction, null, null, "new transaction started", newId, null, "new transaction started") : Context.RegisterIoCommandStart(Process, IoCommandKind.dbTransaction, null, null, "new transaction started and merged with previous", newId, () => new[] { new KeyValuePair <string, object>("previous transaction", previousId) }, "new transaction started and merged with previous"); break; case TransactionScopeKind.Suppress: iocUid = Context.RegisterIoCommandStart(Process, IoCommandKind.dbTransaction, null, null, "transaction suppressed", previousId, null, "existing transaction suppressed"); break; } Context.RegisterIoCommandSuccess(Process, IoCommandKind.dbTransaction, iocUid, null); }
public EtlTransactionScope BeginScope(IProcess process, TransactionScopeKind kind, LogSeverity logSeverity) { return(new EtlTransactionScope(this, process, kind, TransactionScopeTimeout, logSeverity)); }