Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public MetadataAssociationEndConstraintCollection(MetadataAssociationEnd owner) : base(owner)
 {
 }