/// <summary> /// Add conversation to the <see cref="ConversationPool"/> /// </summary> /// <remarks> /// if already in the <see cref="ConversationPool"/>, do simply change the SpanStrategy if there is any change /// </remarks> private bool Span(SpanStrategy om, string inWorkSpaceName, TransactionStrategy ts) { Visited(); if (!om.ValidForSpan) { throw new ArgumentException(om + "is not an accetable overspan strategy for spanning"); } if (GivenUp) { throw new ConversationAlreadyCancelledException(); } SpanStrategy = om; bool retVal = false; if (!IsInPool) { ConversationPool.Instance.Add(id, this); retVal = true; } if (ts != null) { TransactionStrategy = ts; } TransactionStrategy.ChangeFlushModeOnConversationBeginsSpan(sessManagers.Values); workSpaceName = inWorkSpaceName; WorkSpaceUpdate(); return(retVal); }
private ISession GetSession(SessionAndTransactionManager sm) { ISession sess = sm.GetSession(); TransactionStrategy.OnSessionUsed(sm); return(sess); }
private void CommitTransaction() { if (Options.IsTransactional == true) { TransactionStrategy.Commit(); } }
protected override void BeginUow() { if (Options.IsTransactional == true) { TransactionStrategy.InitOptions(Options); } }
public virtual TDbContext GetOrCreateDbContext <TDbContext>() where TDbContext : EfCoreDbContextBase { var concreteDbContextType = typeof(TDbContext); var connectionString = base.ConnectionStringResolver.GetNameOrConnectionString(); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; EfCoreDbContextBase dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { dbContext = TransactionStrategy.CreateDbContext <TDbContext>(connectionString, DbContextResolver); } else { dbContext = DbContextResolver.Resolve <TDbContext>(connectionString, null); } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
/// <summary> /// Remove this from the <see cref="ConversationPool"/> /// </summary> /// <remarks> /// if not in the <see cref="ConversationPool"/>, do nothing /// </remarks> private void StopSpanning() { if (IsInPool) { ConversationPool.Instance.Remove(id); } if (spanStrategy != SpanStrategy.DoNotSpan) //I use field here because the property alwasy return SpanStrategy.DoNotSpan when not in pool, the field is more indicative on what the strategy was set as. { SpanStrategy = SpanStrategy.DoNotSpan; TransactionStrategy.ChangeFlushModeOnConversationStopsSpan(sessManagers.Values); WorkSpaceUpdate(); } }
internal void OnWorkSpaceClose() { if (GivenUp) { RollbackAndClose(); } else if (!IsInPool) { CommitAndClose(); } else { TransactionStrategy.OnWorkSpaceClosedBeforeConversationEnds(sessManagers.Values); } }
protected override void DisposeUow() { if (Options.IsTransactional == true) { TransactionStrategy.Dispose(IocResolver); } else { foreach (var context in GetAllActiveDbContexts()) { context.Dispose(); IocResolver.Release(context); } } ActiveDbContexts.Clear(); }
public void Reset() { TransactionStrategy.Reset(); }
public bool SpanWithCookie(string inWorkSpaceName, TransactionStrategy ts) { return(Span(SpanStrategy.Cookie, inWorkSpaceName, ts)); }
/// <summary> /// /// </summary> /// <param name="ts">Controls the TransactionStrategy</param> /// <returns></returns> public bool SpanWithPostBacks(TransactionStrategy ts) { return(Span(SpanStrategy.Post, string.Empty, ts)); }
/// <summary> /// Add conversation to the <see cref="ConversationPool"/> /// </summary> /// <remarks> /// if already in the <see cref="ConversationPool"/>, do simply change the SpanStrategy if there is any change /// </remarks> private bool Span(SpanStrategy om, string inWorkSpaceName, TransactionStrategy ts) { Visited(); if (!om.ValidForSpan) { throw new ArgumentException(om + "is not an accetable overspan strategy for spanning"); } if (GivenUp) { throw new ConversationAlreadyCancelledException(); } SpanStrategy = om; bool retVal = false; if (!IsInPool) { ConversationPool.Instance.Add(id, this); retVal = true; } if (ts != null) TransactionStrategy = ts; TransactionStrategy.ChangeFlushModeOnConversationBeginsSpan(sessManagers.Values); workSpaceName = inWorkSpaceName; WorkSpaceUpdate(); return retVal; }
public bool SpanWithCookie(string inWorkSpaceName, TransactionStrategy ts) { return Span(SpanStrategy.Cookie, inWorkSpaceName, ts); }
/// <summary> /// /// </summary> /// <param name="ts">Controls the TransactionStrategy</param> /// <returns></returns> public bool SpanWithPostBacks(TransactionStrategy ts) { return Span(SpanStrategy.Post, string.Empty, ts); }