/// <summary> /// 判断是否多对一 /// </summary> /// <param name="source"></param> /// <returns></returns> public static bool IsManyOne(Member source) { DataTypeInfos info = EntityFieldBase.GetTypeInfo(source); return(info == null); }
/// <summary> /// 填充类信息 /// </summary> private void FillClassInfo() { ClrType ctype = _classType; _className = ctype.Name; _baseType = GetBaseClass(ctype, out _baseTypeName); _fileName = GetFileName(ctype, out _cp); EnvDTE.ProjectItem classItem = GetProjectItemByFileName(DesignerInfo, _fileName); //foreach (CodeElementPosition cp in ctype.SourceCodePositions) //{ // if (cp.FileName.IndexOf(".extend.cs") <0) // { // _fileName = cp.FileName; // _cp = cp; // break; // } //} _namespace = ctype.OwnerNamespace.Name; _summary = ctype.DocSummary; _tableName = EntityFieldBase.ToCamelName(_className); _lstSource = CodeFileHelper.ReadFile(FileName); _fileEncoding = CodeFileHelper.GetFileEncoding(_fileName); if (ctype.Generic) { InitGeneric(ctype, _dicGenericInfo); } }
/// <summary> /// 获取字段的配置信息 /// </summary> /// <param name="fInfo"></param> private void GetEntityParamInfo(ClrField fInfo) { _propertyName = ToPascalName(FieldName); _paramName = FieldName.Trim('_'); DataTypeInfos info = EntityFieldBase.GetTypeInfo(fInfo); if (info != null) { _dbType = info.DbTypes[0].ToString(); _length = info.DbLength; } }
/// <summary> /// 更新类信息 /// </summary> /// <param name="ctype"></param> /// <param name="project"></param> /// <param name="currentDiagram"></param> /// <returns></returns> public static EntityConfig GetEntityConfigByTable(ClrType ctype, ClassDesignerInfo desinfo) { EntityConfig entity = new EntityConfig(ctype, desinfo); //entity.DesignerInfo.SelectDocView = selectDocView; if (string.IsNullOrEmpty(entity.TableName)) { return(null); } DBInfo db = entity.DbInfo.CreateDBInfo(); List <string> selTab = new List <string>(); selTab.Add(entity.TableName); List <DBTableInfo> lstGen = TableChecker.GetTableInfo(db, selTab); if (lstGen.Count > 0) { DBTableInfo info = lstGen[0]; Dictionary <string, EntityParamField> dicParam = entity.GetParamMapField(); entity._dbParams = new List <EntityParam>(); foreach (EntityParam prm in info.Params) { string paramName = prm.ParamName; if (dicParam.ContainsKey(paramName)) { continue; } entity._dbParams.Add(prm); } Dictionary <string, EntityRelationItem> dicRelation = entity.GetRelationmMapField(); entity._dbRelations = new List <TableRelationAttribute>(); foreach (TableRelationAttribute tr in info.RelationItems) { string key = EntityFieldBase.ToPascalName(tr.TargetTable) + ":" + EntityFieldBase.ToPascalName(tr.SourceName) + ":" + EntityFieldBase.ToPascalName(tr.TargetName); if (dicRelation.ContainsKey(key)) { continue; } entity._dbRelations.Add(tr); } } return(entity); }
/// <summary> /// 添加映射信息 /// </summary> /// <param name="entity"></param> /// <param name="classNode"></param> private static void AppendRelationInfo(List <TableRelationAttribute> relationItems, XmlNode classNode) { XmlDocument doc = classNode.OwnerDocument; if (relationItems == null) { return; } foreach (TableRelationAttribute field in relationItems) { //EntityParamField field = kp.Value; XmlNode node = doc.CreateElement("relation"); classNode.AppendChild(node); XmlAttribute att = doc.CreateAttribute("FieldName");//字段名 att.InnerText = field.FieldName; node.Attributes.Append(att); att = doc.CreateAttribute("PropertyName");//对应的属性名名 att.InnerText = field.PropertyName; node.Attributes.Append(att); att = doc.CreateAttribute("SourceProperty");//数据库类型 att.InnerText = EntityFieldBase.ToPascalName(field.SourceName); node.Attributes.Append(att); att = doc.CreateAttribute("TargetProperty");//数据库类型长度 att.InnerText = EntityFieldBase.ToPascalName(field.TargetName); node.Attributes.Append(att); att = doc.CreateAttribute("IsToDB");//数据库类型长度 att.InnerText = field.IsToDB ? "1" : "0"; node.Attributes.Append(att); att = doc.CreateAttribute("IsParent");//数据库类型长度 att.InnerText = field.IsParent ? "1" : "0"; node.Attributes.Append(att); att = doc.CreateAttribute("Description");//属性注释 att.InnerText = field.Description; node.Attributes.Append(att); } }
/// <summary> /// 初始化字段信息 /// </summary> private void InitField() { List <ClrField> lstFields = GetAllMember <ClrField>(_classType, false); _fields = new Dictionary <string, CodeElementPosition>(); for (int j = 0; j < lstFields.Count; j++) { ClrField field = lstFields[j]; if (field == null) { continue; } if (field.SourceCodePositions == null) { continue; } foreach (CodeElementPosition cp in field.SourceCodePositions) { if (!IsManyOne(field)) { EntityParamField epf = new EntityParamField(cp, field, this); epf.AllowNull = EntityFieldBase.IsNullProperty(field.MemberTypeShortName); _eParamFields.Add(epf); } else { EntityRelationItem erf = new EntityRelationItem(cp, field, this); _eRelation.Add(erf); } _fields[field.Name] = cp; } _eParamFields.SortItem(); _eRelation.SortItem(); } _hasConfig = EntityMappingConfig.LoadConfigInfo(this); }