/// <summary> /// Serialize content only <see cref="ActionInfo"/> to json string /// </summary> /// <returns>json string</returns> protected override void ToJsonRaw(JsonWriter writer) { writer.WriteProperty("ActionID", ActionID); writer.WriteProperty("AssemblyID", AssemblyID); writer.WriteProperty("ClassName", ClassName); writer.WriteProperty("Name", Name); writer.WriteProperty("LogOnError", LogOnError); writer.WriteProperty("EMailOnError", EMailOnError); writer.WriteProperty("EMailGroup", EMailGroup); writer.WriteProperty("TransactionSupport", TransactionSupport.ToString()); writer.WriteProperty("WebAuthentication", WebAuthentication.ToString()); writer.WriteProperty("AuthenticationRequired", AuthenticationRequired); writer.WriteProperty("AuthorizationRequired", AuthorizationRequired); writer.WriteProperty("AsyncMode", AsyncMode); writer.WriteProperty("IID", IID); writer.WriteProperty("InterfaceID", InterfaceID); writer.WriteProperty("InterfaceName", InterfaceName); writer.WriteProperty("Description", Description); writer.WriteProperty("MultipleRowsParams", MultipleRowsParams); writer.WriteProperty("MultipleRowsResult", MultipleRowsResult); writer.WriteProperty("IsStatic", IsStatic); writer.WritePropertyName("InterfaceParameters"); writer.WriteStartArray(); foreach (var item in InterfaceParameters) { item.Value.ToJson(writer); } writer.WriteEndArray(); }
/// <summary> /// 浅度的拷贝构造,目的是生成当前transaction的一个副本 /// </summary> /// <param name="trans"></param> private Transaction(Transaction trans, TransactionSupport support) { this._guid = trans._guid; this._session = trans.Sessi; this._trans = trans.Trans; this._newTrans = false; this._buildSession = false; this._PTrans = trans; }
private Transaction(string guid, ISession session, TransactionSupport ts, SessionCache manage) { this._guid = guid; this._session = session; if (ts != TransactionSupport.Support) { this._trans = _session.BeginTransaction(); this._newTrans = true; } else { this._trans = null; this._newTrans = false; } manage.CurTrans = this; this._buildSession = true; }
/// <summary> /// Check transaction match and root occurrence match after a super pattern /// is generated via connection or combination. /// </summary> /// <param name="superPt"></param> internal void CheckMatch(PatternTree superPt) { if (HasOccurrenceMatch != YesNoUnknown.Unknown && HasTransactionMatch != YesNoUnknown.Unknown) { return; } if (superPt.IsFrequent) { HasSuperFrequentPattern = YesNoUnknown.Yes; } if (RootSupport.Equals(superPt.RootSupport)) { HasOccurrenceMatch = YesNoUnknown.Yes; } else if (TransactionSupport.Equals(superPt.TransactionSupport)) { HasTransactionMatch = YesNoUnknown.Yes; } }
/// <summary> /// 根据事物类型生成一个新的事物 /// </summary> /// <param name="cacheGuid"></param> /// <param name="ts"></param> /// <returns></returns> internal static Transaction New(string cacheGuid, TransactionSupport ts, bool? useReadDB) { SessionCache cache = SessionCache.GetCache(cacheGuid, false); if (cache != null) { if (cache.CurTrans == null || cache.TranStack.Count == 0 || cache.CurSession == null || cache.SessionStack.Count == 0 || cache.CurTrans._session.SessionFactory.IsClosed) { cache.Dispose(); cache = null; } } Transaction trans = null; ///如果当前外层没有session包裹则从参数中获取,如果外层有事务则 ///根据外层事务判断当前到底使用哪个数据库 //首先根据事务来判断是否使用读取数据库 bool isReadDB = (ts == TransactionSupport.Support ? true : false); //如果存在cache则从cache中取 if (cache != null) { isReadDB = cache.UseReadDB; } //如果显示设置了是否需要读取数据库从来源来获取 if (useReadDB != null) { isReadDB = useReadDB ?? true; } if (cache == null) { //新的事务,重新生成cacheGuid cacheGuid = SessionGuid.NewGuid(); cache = SessionCache.GetCache(cacheGuid, true); cache.UseReadDB = isReadDB; cache.AuthContext = Auth.AuthContext.GetInstance(); ISessionFactory factory = SessionCache.GetSessionFactory(isReadDB); ISession session = factory.OpenSession(); session.FlushMode = FlushMode.Commit; trans = new Transaction(cacheGuid, session, ts, cache); //创建新事务的时候需要初始化authcontext //当前是第一个事务 } else { if (useReadDB == null) { useReadDB = cache.UseReadDB; } if (ts == TransactionSupport.RequiredNew || (ts == TransactionSupport.Required && cache.CurTrans._trans == null) || isReadDB != cache.UseReadDB) { ///如果当前存在事务的话并且上面代码没有显式要求使用哪一个数据库的话则 ///默认从缓存中获取当前数据库 NHExt.Runtime.Auth.AuthContext ctx = cache.AuthContext; //新的事务,重新生成cacheGuid cacheGuid = SessionGuid.NewGuid(); cache = SessionCache.GetCache(cacheGuid, true); cache.AuthContext = ctx; cache.UseReadDB = isReadDB; ISessionFactory factory = SessionCache.GetSessionFactory(isReadDB); ISession session = factory.OpenSession(); session.FlushMode = FlushMode.Commit; trans = new Transaction(cacheGuid, session, ts, cache); } else { //上层存在事务的话就不用考虑是否重新生成session trans = new Transaction(cache.CurTrans, ts); } } cache.TranStack.Push(trans); cache.CurTrans = trans; ////生成事物之后自动创建一个session边界 Session.New(cacheGuid); return trans; }
/// <summary> /// 根据事物类型生成一个新的事物 /// </summary> /// <param name="ts"></param> /// <returns></returns> public static Transaction New(TransactionSupport ts, bool? useReadDB = null) { return Transaction.New(SessionGuid.Guid, ts, useReadDB); }