/// <summary /// Compares ComplexType elements from CSDL to IEdmComplexTypes in the model. /// </summary> /// <param name="schemaElements">The CSDL schema elements to extract ComplexType elements from.</param> /// <param name="model">The Edm model to extract the IEdmComplexTypes from.</param> private static void CompareComplexTypes(IEnumerable <XElement> schemaElements, IEdmModel model) { // Index all types in the CSDL by full name to facilitate derived type verification var typeIndex = BuildNamedElementIndex(schemaElements, "ComplexType"); ExceptionUtilities.Assert(typeIndex.Count == model.ComplexTypes().Count(), "Unexpected type count in model"); foreach (var complexType in typeIndex) { var modelType = model.ComplexTypes().SingleOrDefault(t => t.FullName() == complexType.Key); ExceptionUtilities.Assert(modelType != null, "Failed to find complex type " + complexType.Key); var complexTypeElement = complexType.Value; CompareBaseType(complexTypeElement, modelType); var propertyElements = RecurseBaseTypes(complexTypeElement, typeIndex, (e) => e.EdmElements("Property")); CompareStructuralProperties(propertyElements, modelType); var navigationPropertyElements = RecurseBaseTypes(complexTypeElement, typeIndex, (e) => e.EdmElements("NavigationProperty")); CompareNavigationProperties(navigationPropertyElements, modelType); } }