/// <summary> /// 根据跟定的FunctionName得到元数据,如果找不到,抛出异常 /// 缓存查询过的 /// </summary> /// <param name="function_name">Function Name</param> /// <returns>Meta_FCMaster,元数据,失败抛出异常</returns> public Meta_FCMaster get_BlockMeta(string function_name) { if (funcname_to_MetaFCMaster.ContainsKey(function_name)) { //缓存中存在此function的相关信息,查找缓存 Meta_FCMaster master_temp = funcname_to_MetaFCMaster[function_name] as Meta_FCMaster; return(master_temp); } //从数据库中加载 IList <Meta_FCMaster> meta_masters = manager.MetaMasterCRUD.Load_FCMasters_By_FuncName(function_name); if (meta_masters.Count > 1) { throw new Exception("same function name occurs more than once"); } if (meta_masters.Count < 1) { throw new Exception("no function: " + function_name + "metadata!"); } Meta_FCMaster meta_master = meta_masters[0]; //添加进缓存 this.funcname_to_MetaFCMaster[function_name] = meta_master; return(meta_master); }
/// <summary> /// 根据跟定的Function Name和Pin Name,Pin的Index,如果找不到,抛出异常 /// 缓存查询过的 /// </summary> /// <param name="function_name">Function Name</param> /// <param name="pinname">Pin Name</param> /// <returns>Pin 的Index,失败抛出异常</returns> public int get_pin_index(string function_name, string pinname) { Meta_FCMaster meta_master = get_BlockMeta(function_name); Meta_FCDetail meta_pin = get_PinMeta(meta_master, pinname); return(meta_pin.PinIndex); }
public string get_pin_dataType(string function_name, string pinname) { Meta_FCMaster meta_master = get_BlockMeta(function_name); Meta_FCDetail meta_pin = get_PinMeta(meta_master, pinname); return(meta_pin.DataType); }
/// <summary> /// 加载表中所有的Meta_FCMaster以及与其相关的Meta_FCDetail /// </summary> /// <returns></returns> public List <Meta_FCMaster> Load_FCMasters() { IList <Meta_FCMaster> masters = this.session.CreateQuery("from Meta_FCMaster").List <Meta_FCMaster>(); IList <Meta_FCDetail> details = this.session.CreateQuery("from Meta_FCDetail").List <Meta_FCDetail>(); Hashtable table = new Hashtable(); foreach (Meta_FCMaster master in masters) { table[master.ID] = master; master.Meta_FCDetail_List = new MyList(master); } //双向关联detail和master foreach (Meta_FCDetail detail in details) { if (table.ContainsKey(detail.Meta_FCMaster_ID)) { Meta_FCMaster temp = (Meta_FCMaster)table[detail.Meta_FCMaster_ID]; temp.Meta_FCDetail_List.Add(detail); detail.Meta_FCMaster = temp; } else { continue; } } List <Meta_FCMaster> result = new List <Meta_FCMaster>(); foreach (Meta_FCMaster m in table.Values) { result.Add(m); } return(result); }
/// <summary> /// 根据跟定的Meta_FCMaster和PinName得到Pin的元数据,如果找不到,抛出异常 /// </summary> /// <param name="function_name">Function Name</param> /// <returns>Meta_FCDetail,元数据,失败抛出异常</returns> public Meta_FCDetail get_PinMeta(Meta_FCMaster meta_master, string pinname) { foreach (Meta_FCDetail detail in meta_master.Meta_FCDetail_List) { if (detail.PinName.Equals(pinname)) { return(detail); } } throw new Exception("no such " + pinname + " name in " + meta_master.FunctionName); }
/// <summary> /// 根据跟定的Meta_FCMaster和PinName得到Pin的元数据,如果找不到,抛出异常 /// </summary> /// <param name="function_name">Function Name</param> /// <returns>Meta_FCDetail,元数据,失败抛出异常</returns> public Meta_FCDetail get_PinMeta(Meta_FCMaster meta_master, string pinname) { foreach (Meta_FCDetail detail in meta_master.Meta_FCDetail_List) { if (detail.PinName.Equals(pinname)) { return detail; } } throw new Exception("no such " + pinname + " name in " + meta_master.FunctionName); }
/// <summary> /// 根据ID获得Cld_FCBlock /// </summary> /// <param name="condition">ID type:int</param> /// <returns></returns> public Meta_FCMaster GetMeta_FCMaster_By_ID(int condition) { using (ITransaction transaction = session.BeginTransaction()){ try{ Meta_FCMaster result = this.session.Get <Meta_FCMaster>(condition); transaction.Commit(); return(result); }catch (Exception e) { transaction.Rollback(); throw e; } } }
/// <summary> /// 加载给定Name的meta_fcmaster以及与其相关的Meta_FCDetail /// </summary> /// <param name="funcname"></param> /// <returns></returns> public Meta_FCMaster Load_FCMaster_By_FuncName(string funcname) { //获得所有符合条件的master IList <Meta_FCMaster> masters = this.session.CreateQuery("from Meta_FCMaster as m where m.FunctionName = '" + funcname + "'") .List <Meta_FCMaster>(); if (masters.Count == 0) { throw new Exception("no such Function Name"); } Hashtable table = new Hashtable(); string querystring = "from Meta_FCDetail as d where "; //构造查询sql语句 foreach (Meta_FCMaster master in masters) { table[master.ID] = master; querystring = querystring + "d.Meta_FCMaster_ID=" + master.ID + " OR "; //分配空间 master.Meta_FCDetail_List = new ArrayList(); } querystring = querystring.Trim(); if (querystring.EndsWith("OR")) { querystring = querystring.Substring(0, querystring.LastIndexOf("OR")); } IList <Meta_FCDetail> details = this.session.CreateQuery(querystring).List <Meta_FCDetail>(); //关联detail foreach (Meta_FCDetail d in details) { if (table.ContainsKey(d.Meta_FCMaster_ID)) { Meta_FCMaster temp = (Meta_FCMaster)table[d.Meta_FCMaster_ID]; temp.Meta_FCDetail_List.Add(d); d.Meta_FCMaster = temp; } } if (masters.Count > 1) { throw new Exception("same function name accures more than one time"); } return(masters[0]); }
/// <summary> /// 根据跟定的FunctionName得到元数据,如果找不到,抛出异常 /// 缓存查询过的 /// </summary> /// <param name="function_name">Function Name</param> /// <returns>Meta_FCMaster,元数据,失败抛出异常</returns> public Meta_FCMaster get_BlockMeta(string function_name) { if (funcname_to_MetaFCMaster.ContainsKey(function_name)) { //缓存中存在此function的相关信息,查找缓存 Meta_FCMaster master_temp = funcname_to_MetaFCMaster[function_name] as Meta_FCMaster; return(master_temp); } //从数据库中加载 Meta_FCMaster meta_master = this.manager.MetaMasterCRUD.Load_FCMaster_By_FuncName(function_name); //添加进缓存 this.funcname_to_MetaFCMaster[function_name] = meta_master; return(meta_master); }
/// <summary> /// 默认构造函数 /// <summary> public Meta_FCDetail() : base() { m_ID = -1; m_FunctionName = String.Empty; m_PinName = String.Empty; m_PinIndex = -1; m_DataType = String.Empty; m_Tune = false; m_PinType = String.Empty; m_MaxValue = String.Empty; m_MinValue = String.Empty; m_ValidValue = String.Empty; m_DefaultValue = String.Empty; m_Required = false; m_Description = String.Empty; m_Fixed = false; m_PinSignalType = String.Empty; m_Meta_FCMaster_ID = -1; m_Meta_FCMaster = null; }
/// <summary> /// 默认构造函数 /// <summary> public Meta_FCDetail():base(){ m_ID = -1; m_FunctionName = String.Empty; m_PinName = String.Empty; m_PinIndex = -1; m_DataType = String.Empty; m_Tune = false; m_PinType = String.Empty; m_MaxValue = String.Empty; m_MinValue = String.Empty; m_ValidValue = String.Empty; m_DefaultValue = String.Empty; m_Required = false; m_Description = String.Empty; m_Fixed = false; m_PinSignalType = String.Empty; m_Meta_FCMaster_ID = -1; m_Meta_FCMaster = null; }