/// <summary> /// Converts a model from Edm term into Taupo term /// </summary> /// <param name="edmModel">The input model in Edm term</param> /// <returns>The output model in Taupo term</returns> public EntityModelSchema ConvertToTaupoModel(IEdmModel edmModel) { this.edmModel = edmModel; this.associationRegistry = new AssociationRegistry(); var taupoModel = new EntityModelSchema(); foreach (var edmComplexType in edmModel.SchemaElements.OfType <IEdmComplexType>()) { ComplexType taupoComplexType = this.ConvertToTaupoComplexType(edmComplexType); taupoModel.Add(taupoComplexType); } foreach (var edmEntityType in edmModel.SchemaElements.OfType <IEdmEntityType>()) { EntityType taupoEntityType = this.ConvertToTaupoEntityType(edmEntityType); taupoModel.Add(taupoEntityType); // convert to Association using information inside Navigations foreach (var edmNavigationProperty in edmEntityType.DeclaredNavigationProperties()) { if (!this.associationRegistry.IsAssociationRegistered(edmNavigationProperty)) { this.associationRegistry.RegisterAssociation(edmNavigationProperty); } } } var edmEntityContainer = edmModel.EntityContainer; if (edmEntityContainer != null) { EntityContainer taupoEntityContainer = this.ConvertToTaupoEntityContainer(edmEntityContainer); taupoModel.Add(taupoEntityContainer); } foreach (var edmFunction in edmModel.SchemaElements.OfType <IEdmOperation>()) { Function taupoFunction = this.ConvertToTaupoFunction(edmFunction); taupoModel.Add(taupoFunction); } foreach (var edmEnum in edmModel.SchemaElements.OfType <IEdmEnumType>()) { EnumType taupoEnumType = this.ConvertToTaupoEnumType(edmEnum); taupoModel.Add(taupoEnumType); } return(taupoModel.Resolve()); }
/// <summary> /// Parses the specified CSDL/SSDL content. /// </summary> /// <param name="xsdlContent">Content of multiple CSDL or multiple SSDL files.</param> /// <returns> /// Instance of <see cref="EntityModelSchema"/> which represents Entity Model parsed from the files. /// </returns> public EntityModelSchema Parse(params XElement[] xsdlContent) { EntityModelSchema model = new EntityModelSchema(); this.entityTypeFullNames = new List <string>(); this.complexTypeFullNames = new List <string>(); this.enumTypeFullNames = new List <string>(); foreach (XElement xsdl in xsdlContent) { this.RegisterNominalTypes(xsdl); } foreach (XElement xsdl in xsdlContent) { this.ParseSingleXsdl(model, xsdl); } return(model.Resolve()); }