public static void ValidateInstance(object obj) { if (!CLASS_TYPE.IsAssignableFrom(obj.GetType())) { throw new ArgumentException(); } }
public void initialize(ulong uid, string name, string desc, InfoStats.CLASS_TYPE classType) { this.UID = uid; this.Name = name; this.Description = desc; this.ClassType = classType; }
static DynamicClassBridge() { try { var assembly = Assembly.Load("System.Linq.Dynamic.Core"); FACTORY_TYPE = assembly.GetType("System.Linq.Dynamic.Core.DynamicClassFactory"); CLASS_TYPE = assembly.GetType("System.Linq.Dynamic.Core.DynamicClass"); PROP_TYPE = assembly.GetType("System.Linq.Dynamic.Core.DynamicProperty"); CREATE_TYPE_METHOD = FACTORY_TYPE.GetMethod("CreateType"); INDEXER_METHOD = CLASS_TYPE.GetMethod("get_Item"); } catch (FileNotFoundException x) { throw new Exception("Please install 'System.Linq.Dynamic.Core' package", x); } }
/// <summary> /// 透過 DataTable 產生類別敘述定義 /// </summary> /// <param name="dt">DataTable</param> /// <param name="className">自訂類別名稱</param> /// <param name="keyValues">Primary Key (string Array)</param> /// <returns></returns> public string GetClassDef( DataTable dt, string className, string[] keyValues, CLASS_TYPE classType) { string baseClassWord = classType == CLASS_TYPE.DTO ? "" : " : AuditableEntity"; StringBuilder sb = new StringBuilder(); sb.AppendLine(string.Format("public class {0}", className == null ? $"{dt.TableName.ToUpperFirstWord()}{baseClassWord}" : $"{className}{baseClassWord}")); sb.AppendLine("\t{"); int columnOrder = 0; columnOrder = GetClassProperties(dt, keyValues, sb, columnOrder); sb.AppendLine("\t}"); return(sb.ToString()); }
/// <summary> /// 產生 Entities 的 Class 定義 /// </summary> /// <param name="project"></param> /// <param name="currentFolder"></param> /// <param name="entitiesFolder"></param> /// <param name="classType">需要產生的類別類型 (DTO 物件/Entity 物件)</param> public static void CreateEnitiesFromSourceTables( Project project, string currentFolder, ProjectItem entitiesFolder, string classNameOrTableName, string commandName, bool createKeyAttribute, CLASS_TYPE classType) { Microsoft.VisualStudio.Shell.ThreadHelper.ThrowIfNotOnUIThread(); string ClassName = classNameOrTableName.Replace(" ", "_"); ClassDef clsDef = new ClassDef(); SQLStore store = new SQLStore(); string ClassDefined = ClassDef.GetClassTemplate; string classEndWord = classType == CLASS_TYPE.DTO ? "Dto" : "Ent"; string usingStatement = classType == CLASS_TYPE.ENTITY ? $"\nusing {project.Name}.Common;" : ""; string commandOrFolder = classType == CLASS_TYPE.ENTITY ? "Entities" : commandName; ClassDefined = ClassDefined.Replace("$(USING)$", usingStatement); if (string.IsNullOrEmpty(currentFolder)) { ClassDefined = ClassDefined.Replace(".$(FOLDER_NAME)$", currentFolder); } else { ClassDefined = ClassDefined.Replace("$(FOLDER_NAME)$", currentFolder); } ClassDefined = ClassDefined.Replace("$(FOLDER_NAME)$", currentFolder); ClassDefined = ClassDefined.Replace("$(NAMESPACE_DEF)$", $"{project.Name}"); ClassDefined = ClassDefined.Replace("$(QUERY_COMMAND_NAME)$", $"{commandOrFolder}"); ClassDefined = ClassDefined.Replace( "$(CLASS_DEF)$", clsDef.GetClassDef( store.GetNoDataDataTableByName(classNameOrTableName), $"{ClassName.ToUpperFirstWord()}{classEndWord}", createKeyAttribute ? store.GetTableKeyByName(string.Format("{0}", ClassName)) : new string[] { }, classType)); //產生等會使用的暫存檔名 string TempCSPath = Path.Combine( Environment.GetEnvironmentVariable("temp"), $"{classNameOrTableName.ToUpperFirstWord()}{classEndWord}.cs"); if (!Directory.Exists(Path.GetDirectoryName(TempCSPath))) { Directory.CreateDirectory(Path.GetDirectoryName(TempCSPath)); } //建立暫存的 Class 檔案 CreateModelCSFile(ClassDefined, TempCSPath); //加入暫存的 Class 檔案 entitiesFolder.ProjectItems.AddFromFileCopy(TempCSPath); //刪除掉暫存檔案 try { File.Delete(TempCSPath); } catch (Exception ex) { } //刪除暫存檔案若失敗不處理任何訊息. //} }
/// <summary> /// 透過 DataTable 產生類別敘述定義 /// </summary> /// <param name="dt">DataTable</param> /// <param name="className">自訂類別名稱</param> /// <returns></returns> public string GetClassDef(DataTable dt, string className, CLASS_TYPE classType) { return(GetClassDef(dt, className, new string[] { }, classType)); }
/// <summary> /// 透過 DataTable 產生類別敘述定義 /// </summary> /// <param name="dt"></param> /// <returns></returns> public string GetClassDef(DataTable dt, CLASS_TYPE classType) { return(GetClassDef(dt, null, classType)); }