public static void ValidateInstance(object obj)
 {
     if (!CLASS_TYPE.IsAssignableFrom(obj.GetType()))
     {
         throw new ArgumentException();
     }
 }
예제 #2
0
 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);
     }
 }
예제 #4
0
        /// <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());
        }
예제 #5
0
        /// <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) { } //刪除暫存檔案若失敗不處理任何訊息.
            //}
        }
예제 #6
0
 /// <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));
 }
예제 #7
0
 /// <summary>
 /// 透過 DataTable 產生類別敘述定義
 /// </summary>
 /// <param name="dt"></param>
 /// <returns></returns>
 public string GetClassDef(DataTable dt, CLASS_TYPE classType)
 {
     return(GetClassDef(dt, null, classType));
 }