/// <summary> /// 获取导航属性所属的主键 /// </summary> /// <param name="def"></param> /// <param name="dojoCompile"></param> /// <param name="toEntity"></param> /// <returns></returns> public static string GetNavPrimaryContent(EntityDefinition def, CompileBase compile, string toEntity) { string navPrimaryKey = string.Empty; var navEntityItems = compile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Value.Name == toEntity).FirstOrDefault(); if (navEntityItems.Value != null) { //继承实体 var inheritEntityId = (from t in navEntityItems.Value.Propertys where t.Key == "InheritEntityId" select t.Value).FirstOrDefault(); if (inheritEntityId != null) { StringBuilder sbPrimary = new StringBuilder(); GetNavPrimaryString(def, compile, navEntityItems.Value.Propertys, sbPrimary); navPrimaryKey = sbPrimary.ToString(); } else { //非继承实体 var nvaDef = compile.GetDocumentBody(navEntityItems.Value) as EntityDefinition; foreach (var navPrimary in nvaDef.Members.OfType <PrimaryMember>()) { navPrimaryKey = navPrimary.Name; } } } return(navPrimaryKey); }
/// <summary> /// 生成逻辑 /// </summary> /// <param name="compile">DOJO编译器</param> /// <param name="doc">文档对象模型</param> public override void Build(CompileBase compile, ProjectDocument doc) { var docBody = compile.GetDocumentBody(doc); var screenDefinition = docBody as ScreenDefinition; if (screenDefinition != null) { ControlHost controlHost = screenDefinition.Root; BuildHtml(doc.Name, controlHost, compile, screenDefinition, doc); } }
/// <summary> /// 获取所有自定义外键 /// </summary> /// <param name="itemPropertys"></param> /// <param name="def"></param> /// <param name="compile"></param> /// <param name="sb"></param> public static void GetAllRelationForeignContent(Dictionary <string, object> itemPropertys, EntityDefinition def, CompileBase compile, StringBuilder sb) { var inheritEntityId = (from t in itemPropertys where t.Key == "InheritEntityId" select t.Value).FirstOrDefault(); if (inheritEntityId != null) { var entityItems = compile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Key == int.Parse(inheritEntityId.ToString())).FirstOrDefault(); if (entityItems.Value != null) { var defItem = compile.GetDocumentBody(entityItems.Value) as EntityDefinition; GetAllRelationForeignString(defItem, compile, sb); //递归处理 GetAllRelationForeignContent(entityItems.Value.Propertys, def, compile, sb); } } else { GetAllRelationForeignString(def, compile, sb); } }
/// <summary> /// 获取导航属性所属的主键 /// </summary> /// <param name="def"></param> /// <param name="dojoCompile"></param> /// <param name="itemPropertys"></param> /// <param name="sb"></param> private static void GetNavPrimaryString(EntityDefinition def, CompileBase compile, Dictionary <string, object> itemPropertys, StringBuilder sb) { var inheritEntityId = (from t in itemPropertys where t.Key == "InheritEntityId" select t.Value).FirstOrDefault(); if (inheritEntityId != null) { var entityItems = compile.ProjectItems.Where(a => a.Value.DocumentType == GlobalIds.DocumentType.Entity && a.Key == int.Parse(inheritEntityId.ToString())).FirstOrDefault(); if (entityItems.Value != null) { var defItem = compile.GetDocumentBody(entityItems.Value) as EntityDefinition; if (defItem.Members.OfType <PrimaryMember>().Count() > 0) { foreach (var primary in defItem.Members.OfType <PrimaryMember>()) { sb.AppendFormat("{0}", primary.Name); } } //递归处理 GetNavPrimaryString(def, compile, entityItems.Value.Propertys, sb); } } }