private IPropertyMap ReadPropertyMap(XmlVisitor visitor, Type entityType) { string name = null; string propertyName = null; int index = -1; while (visitor.VisitNext()) { if (visitor.NodeType == XmlNodeType.EndElement && visitor.Name == "Property") { if (string.IsNullOrEmpty(name)) throw new ArgumentException("Missing required element Property/Name"); if (index < 0) throw new ArgumentException("Missing required element Property/Index"); if (string.IsNullOrEmpty(propertyName)) propertyName = name; var propertyMap = PropertyMap.Create(entityType, propertyName); propertyMap.Name = name; propertyMap.Index = index; return propertyMap; } if (visitor.NodeType != XmlNodeType.Element) continue; if (visitor.Name == "Name") name = visitor.GetElementContentAsString(); else if (visitor.Name == "UniqueName") propertyName = visitor.GetElementContentAsString(); else if (visitor.Name == "Index") index = visitor.GetElementContentAsInt32(); else throw new ArgumentException("Unexpected xml element " + visitor.Name); } throw new ArgumentException("Unexpected end of stream"); }
private IEntityMap ReadEntityMap(XmlVisitor visitor) { Type entityType = null; string entityName = null; string keyName = null; var propertyIndexLength = 0; var properties = new List<IPropertyMap>(); var indexes = new List<IIndex>(); while (visitor.VisitNext()) { if (visitor.NodeType == XmlNodeType.EndElement && visitor.Name == "Entity") { if (entityType == null) throw new ArgumentException("Missing entity type"); if (entityName == null) entityName = entityType.Name; var entityMap = EntityMap.Create(entityType, properties, indexes); entityMap.KeyName = keyName; entityMap.PropertyIndexLength = propertyIndexLength; return entityMap; } if (visitor.NodeType != XmlNodeType.Element) continue; if (visitor.Name == "Type") entityType = Type.GetType(visitor.GetElementContentAsString(), throwOnError: true); else if (visitor.Name == "Name") entityName = visitor.GetElementContentAsString(); else if (visitor.Name == "KeyName") keyName = visitor.GetElementContentAsString(); else if (visitor.Name == "PropertyIndexLength") propertyIndexLength = visitor.GetElementContentAsInt32(); else if (visitor.Name == "Properties") { if (!visitor.IsEmptyElement) ReadPropertyMaps(visitor, entityType, properties); } else if (visitor.Name == "Indexes") { if (!visitor.IsEmptyElement) ReadIndexes(visitor, entityType, indexes); } else throw new ArgumentException("Unexpected xml element " + visitor.Name); } throw new ArgumentException("Unexpected end of stream"); }