/// <summary> /// Fills the transaction isolation level from XML element. /// </summary> /// <param name="element"> /// The XML element containing provider configuration. /// </param> /// <param name="provider">The scope provider instance.</param> private static void FillIsolationLevel(XElement element, TransactQueryScopeProvider provider) { var isolationLevelAttribute = element.Attribute("isolationLevel"); if (isolationLevelAttribute != null) { switch (isolationLevelAttribute.Value.ToLower()) { case "chaos": provider.IsolationLevel = IsolationLevel.Chaos; break; case "readcommitted": provider.IsolationLevel = IsolationLevel.ReadCommitted; break; case "readuncommitted": provider.IsolationLevel = IsolationLevel.ReadUncommitted; break; case "repetableread": provider.IsolationLevel = IsolationLevel.RepeatableRead; break; case "serializable": provider.IsolationLevel = IsolationLevel.Serializable; break; case "snapshot": provider.IsolationLevel = IsolationLevel.Snapshot; break; default: throw new ArgumentException(string.Format( "Can't recognise isolation level: '{0}'. Check transaction scope settings in the query configuration file.", isolationLevelAttribute.Value)); } } }
/// <summary> /// Gets the attempt limit attribute from XML element. /// </summary> /// <param name="element"> /// The XML element containing provider configuration. /// </param> /// <param name="provider">The scope provider instance.</param> private static void FillAttemptLimit(XElement element, TransactQueryScopeProvider provider) { var attemptLimit = element.Attribute("attemptLimit"); var limit = 1; if (attemptLimit != null) { int.TryParse(attemptLimit.Value, out limit); } provider.AttemptLimit = Math.Max(1, limit); }
/// <summary> /// Gets the sope provider from XML element. /// </summary> /// <param name="element"> /// The XML element containing provider configuration. /// </param> /// <returns>The scope provider instance.</returns> public static IQueryScopeProvider GetScopeProvider(XElement element) { var provider = new TransactQueryScopeProvider(); FillScopeOption(element, provider); FillIsolationLevel(element, provider); FillTimeout(element, provider); FillAttemptLimit(element, provider); FillRecreateScope(element, provider); return provider; }
/// <summary> /// Fills the transaction timeout from XML element. /// </summary> /// <param name="element"> /// The XML element containing provider configuration. /// </param> /// <param name="provider">The scope provider instance.</param> private static void FillTimeout(XElement element, TransactQueryScopeProvider provider) { var timeoutAttribute = element.Attribute("timeout"); int timeout; if (timeoutAttribute != null && int.TryParse(timeoutAttribute.Value, out timeout)) { provider.Timeout = timeout; } }
/// <summary> /// Fills the transaction scope option from XML element. /// </summary> /// <param name="element"> /// The XML element containing provider configuration. /// </param> /// <param name="provider">The scope provider instance.</param> private static void FillScopeOption(XElement element, TransactQueryScopeProvider provider) { var optionAttribute = element.Attribute("scopeOption"); if (optionAttribute != null) { switch (optionAttribute.Value.ToLower()) { case "required": provider.TransactionScopeOption = TransactionScopeOption.Required; break; case "requiresnew": provider.TransactionScopeOption = TransactionScopeOption.RequiresNew; break; case "suppress": provider.TransactionScopeOption = TransactionScopeOption.Suppress; break; default: throw new ArgumentException(string.Format( "Can't recognise scope option: '{0}'. Check transaction scope settings in the query configuration file.", optionAttribute.Value)); } } }
/// <summary> /// Gets the recreate scope attribute from XML element. /// </summary> /// <param name="element"> /// The XML element containing provider configuration. /// </param> /// <param name="provider">The scope provider instance.</param> private static void FillRecreateScope(XElement element, TransactQueryScopeProvider provider) { var recreateScopeAttribute = element.Attribute("recreateScope"); var recreateScope = false; if (recreateScopeAttribute != null) { bool.TryParse(recreateScopeAttribute.Value, out recreateScope); } provider.RecreateScope = recreateScope; }