private void ResolveAssociationEnd(XmlReader reader, MetadataAssociationEnd member) { int depth = reader.Depth; var properties = new List <string>(); //解析关系顶点下的成员元素 while (reader.Read() && reader.Depth > depth) { if (reader.NodeType != XmlNodeType.Element) { continue; } switch (reader.Name) { case XML_PROPERTYREF_ELEMENT: var propertyName = this.GetAttributeValue <string>(reader, XML_NAME_ATTRIBUTE, null); if (!string.IsNullOrWhiteSpace(propertyName)) { properties.Add(propertyName); } break; case XML_CONSTRAINTS_ELEMENT: while (reader.Read() && reader.Depth > depth + 1) { if (reader.NodeType != XmlNodeType.Element) { continue; } if (reader.Name == XML_CONSTRAINT_ELEMENT) { var constraint = new MetadataAssociationEndConstraint(reader.GetAttribute(XML_PROPERTYNAME_ATTRIBUTE), reader.GetAttribute(XML_VALUE_ATTRIBUTE), this.GetAttributeValue <ConditionOperator>(reader, XML_OPERATOR_ATTRIBUTE, ConditionOperator.Equal)); member.Constraints.Add(constraint); } else { this.ProcessUnrecognizedElement(reader, null, member); } } break; default: this.ProcessUnrecognizedElement(reader, null, member); break; } } if (properties.Count > 0) { member.Properties = properties.ToArray(); } }
private void ResolveAssociation(XmlReader reader, MetadataConceptContainer container) { //创建关系元素对象 var association = new MetadataAssociation(reader.GetAttribute(XML_NAME_ATTRIBUTE)); int depth = reader.Depth; while (reader.Read() && reader.Depth > depth) { if (reader.NodeType != XmlNodeType.Element) { continue; } if (reader.Name == XML_END_ELEMENT) { var member = new MetadataAssociationEnd(reader.GetAttribute(XML_NAME_ATTRIBUTE), reader.GetAttribute(XML_ENTITY_ATTRIBUTE)) { Multiplicity = this.GetAttributeValue <MetadataAssociationMultiplicity>(reader, XML_MULTIPLICITY_ATTRIBUTE, MetadataAssociationMultiplicity.One), }; //解析当前关系顶点的内部元素 this.ResolveAssociationEnd(reader, member); //将解析成功的命令参数元素加入到命令的参数集合 association.Members.Add(member); } else { this.ProcessUnrecognizedElement(reader, null, container); } } container.Associations.Add(association); }
public MetadataAssociationEndConstraintCollection(MetadataAssociationEnd owner) : base(owner) { }