public static object CreateInstance(Type type, params object[] args) { if (args == null) { return(CreateInstance(type)); } if (args.Length > 3) { return(Activator.CreateInstance(type, args)); } var arg0 = args.Length > 0 ? args[0] : null; var arg1 = args.Length > 1 ? args[1] : null; var arg2 = args.Length > 2 ? args[2] : null; var argType0 = args.Length <= 0 ? typeof(TypeToIgnore) : (args[0] == null ? typeof(object) : args[0].GetType()); var argType1 = args.Length <= 1 ? typeof(TypeToIgnore) : (args[1] == null ? typeof(object) : args[1].GetType()); var argType2 = args.Length <= 2 ? typeof(TypeToIgnore) : (args[2] == null ? typeof(object) : args[2].GetType()); var key = Tuple.Create( type, argType0, argType1, argType2); if (cachedFuncs.TryGetValue(key, out CreateDelegate func)) { return(func(type, arg0, arg1, arg2)); } else { return(CacheFunc(key)(type, arg0, arg1, arg2)); } }
public static object CreateInstance(Type type, params object[] args) { if (args == null) { return(CreateInstance(type)); } if (args.Length > 3 || (args.Length > 0 && args[0] == null) || (args.Length > 1 && args[1] == null) || (args.Length > 2 && args[2] == null)) { return(Activator.CreateInstance(type, args)); } var arg0 = args.Length > 0 ? args[0] : null; var arg1 = args.Length > 1 ? args[1] : null; var arg2 = args.Length > 2 ? args[2] : null; var key = Tuple.Create( type, arg0?.GetType() ?? typeof(TypeToIgnore), arg1?.GetType() ?? typeof(TypeToIgnore), arg2?.GetType() ?? typeof(TypeToIgnore)); if (cachedFuncs.TryGetValue(key, out CreateDelegate func)) { return(func(type, arg0, arg1, arg2)); } else { return(CacheFunc(key)(type, arg0, arg1, arg2)); } }
public static object CreateInstance(Type type, TArg1 arg1, TArg2 arg2, TArg3 arg3) { if (cachedFuncs.TryGetValue(type, out Func <TArg1, TArg2, TArg3, object> func)) { return(func(arg1, arg2, arg3)); } else { return(CacheFunc(type, arg1, arg2, arg3)(arg1, arg2, arg3)); } }
/// <summary> /// 建立資料表 /// </summary> public void CreateDbTable() { var dbDefines = CacheFunc.GetDbTableDefines(); var dbSetting = CacheFunc.GetDatabaseSettings(); var helper = new UpgradeTableHelper(dbSetting); foreach (var define in dbDefines) { helper.UpgradeTable(define); } }
/// <summary> /// 建立指定程式代碼的商業邏輯物件。 /// </summary> /// <param name="progID"></param> /// <returns></returns> public static IBusinessLogic CreateBusinessLogic(Guid sessionGuid, string progID) { var progItem = CacheFunc.GetProgramItem(progID); if (progItem.BusinessInstanceType.IsEmpty) { return(new GBusinessLogic(sessionGuid, progID)); } else { return(DefineFunc.CreateBusinessLogic(progItem.BusinessInstanceType, sessionGuid, progID)); } }
private static void ReSaveProgramDefine() { var helper = new InitDataHelper(); var pd = CacheFunc.GetProgramDefine("SalaryAccount"); helper.ProgDefineToJson(pd); pd = CacheFunc.GetProgramDefine("SalaryAccountCategory"); helper.ProgDefineToJson(pd); pd = CacheFunc.GetProgramDefine("SalaryAccountForSalaryRange"); helper.ProgDefineToJson(pd); pd = CacheFunc.GetProgramDefine("SalaryRange"); helper.ProgDefineToJson(pd); }
/// <summary> /// 使用SqlBulkCopy大量新增資料 /// </summary> /// <param name="databaseID">資料庫編號</param> /// <param name="progID">程式定義代碼</param> /// <param name="tableName">資料定義代碼</param> /// <param name="table">資料表</param> public void SqlBulkCopy(string databaseID, string progID, string tableName, DataTable table) { var progDefine = CacheFunc.GetProgramDefine(progID); var tableDefine = progDefine.Tables[tableName]; if (tableDefine == null || !tableDefine.IsCreateDbTable || DataFunc.IsEmpty(table)) { return; } var sqlBulkCopy = CreateSqlBulkCopy(databaseID, tableDefine, table); SqlBulkCopy(sqlBulkCopy, table); }
/// <summary> /// 建立指定代碼 > 指定資料表的Entity資料列 /// </summary> /// <param name="progID"></param> /// <param name="tableName"></param> /// <returns></returns> public static GEntityRow CreateEntityRow(string progID, string tableName) { var progDefine = CacheFunc.GetProgramDefine(progID); var tableDefine = progDefine.Tables[tableName]; if (tableDefine.EntityInstanceType.IsEmpty) { return(new GEntityRow()); } else { return(DefineFunc.CreateEntityRow(tableDefine.EntityInstanceType)); } }
/// <summary> /// 建構函式 /// </summary> /// <param name="progID">程式代碼</param> public GBaseBusinessLogic(Guid sessionGuid, string progID) : base(sessionGuid) { this.ProgID = progID; this.ProgramDefine = CacheFunc.GetProgramDefine(this.ProgID); }
/// <summary> /// 建立資料表關連。 /// </summary> /// <param name="key">關連鍵值。</param> /// <param name="provider">資料表關連資訊提供者。</param> /// <param name="fieldDefine">關連欄位定義。</param> /// <param name="returnFields">關連取回欄位集合。</param> /// <param name="leftTableAlias">左側資料表別名。</param> /// <param name="detailTableName">明細資料表名稱。</param> /// <param name="destFieldName">目的欄位名稱。</param> private void BuildTableJoin(string key, GTableJoinProvider provider, GFieldDefine fieldDefine, GStringHashSet returnFields, string leftTableAlias, string detailTableName, string destFieldName = "") { // 取得關連程式定義 var programDefine = CacheFunc.GetProgramDefine(fieldDefine.LinkProgID); if (BaseFunc.IsNull(programDefine)) { throw new GException("'{0}' ProgramDefine not found", fieldDefine.LinkProgID); } // 取得關連資料表定義 var tableDefine = programDefine.MasterTable; foreach (string fieldName in returnFields) { var linkReturnField = fieldDefine.LinkReturnFields.FindByDestField(fieldName); if (BaseFunc.IsNull(linkReturnField)) { throw new GException("'{0}' FieldDefine's LinkReturnFields not find DestField '{1}'", fieldDefine.FieldName, fieldName); } var sourceFieldDefine = tableDefine.Fields[linkReturnField.SourceField]; if (BaseFunc.IsNull(sourceFieldDefine)) { throw new GException("'{0}' TableDefine not find '{1}' FieldDefine", tableDefine.TableName, linkReturnField.SourceField); } if (sourceFieldDefine.FieldType == EFieldType.VirtualField) { throw new GException("'{0}' TableDefine's '{1}' FieldDefine not allow VirtualField", tableDefine.TableName, sourceFieldDefine.FieldName); } var tableJoin = provider.TableJoins[key]; if (BaseFunc.IsNull(tableJoin)) { // 建立資料表關連 tableJoin = new GTableJoin { Key = key, LeftTableAlias = leftTableAlias, LeftFieldName = tableDefine.GetLinkReturnActiveField(fieldDefine).DbFieldName, RightTableName = tableDefine.DbTableName, RightTableAlias = GetActiveTableAlias() }; var sKeyField = tableDefine.Fields.Contains(SysFields.ID) ? SysFields.ID : SysFields.RowID; tableJoin.RightFieldName = tableDefine.Fields[sKeyField].DbFieldName; if (tableDefine.Fields.Contains(SysFields.CompanyID)) { tableJoin.RightCompanyID = tableDefine.Fields[SysFields.CompanyID].DbFieldName; } else if (tableDefine.Fields.Contains(SysFields.CommonCompanyID)) { tableJoin.RightCompanyID = tableDefine.Fields[SysFields.CommonCompanyID].DbFieldName; } provider.TableJoins.Add(tableJoin); } // 若來源欄位的欄位類型是 LinkField,則需往上階找關連來源 if (sourceFieldDefine.FieldType == EFieldType.LinkField) { var linkFieldDefine = tableDefine.GetLinkReturnActiveField(sourceFieldDefine); var sKey = key + "." + linkFieldDefine.LinkProgID; var returnFieldSet = new GStringHashSet { sourceFieldDefine.DbFieldName }; BuildTableJoin(sKey, provider, linkFieldDefine, returnFieldSet, tableJoin.RightTableAlias, detailTableName, fieldName); } else { // 記錄關連欄位對應 var linkFieldMapping = new GLinkFieldMapping(); linkFieldMapping.FieldName = (StrFunc.StrIsNotEmpty(destFieldName)) ? destFieldName : fieldName; if (StrFunc.StrIsNotEmpty(detailTableName)) { linkFieldMapping.FieldName = StrFunc.StrFormat("{0}.{1}", detailTableName, linkFieldMapping.FieldName); } linkFieldMapping.TableAlias = tableJoin.RightTableAlias; linkFieldMapping.SourceFieldName = sourceFieldDefine.DbFieldName; provider.Mappings.Add(linkFieldMapping); } } }
/// <summary> /// 建構函式 /// </summary> public GDefineFileHelper() { this.DatabaseSettings = CacheFunc.GetDatabaseSettings(); this.CompanySettings = CacheFunc.GetCompanySettings(); this.ProgramSettings = CacheFunc.GetProgramSettings(); }
public CachedObj(CacheFunc func) { _func = func; }
/// <summary> /// 建構函式 /// </summary> public GBaseDbAccess(Guid sessionGuid) { var dbSetting = CacheFunc.GetDatabaseSettings(); this.DbAccess = new GDbAccess(dbSetting); }