/// <summary> /// Performs a deep copy of the specified <see cref="EntityModelSchema"/>. /// </summary> /// <param name="schema">The <see cref="EntityModelSchema"/> to deep copy.</param> /// <returns>A deep copy of the <see cref="EntityModelSchema"/>.</returns> public static EntityModelSchema Clone(this EntityModelSchema schema) { ExceptionUtilities.CheckArgumentNotNull(schema, "schema"); var model = new EntityModelSchema(); CopyAnnotations(model, schema.Annotations); foreach (var association in schema.Associations) { model.Add(association.Clone()); } foreach (var complexType in schema.ComplexTypes) { model.Add(complexType.Clone()); } foreach (var entityContainer in schema.EntityContainers) { model.Add(entityContainer.Clone()); } foreach (var entityType in schema.EntityTypes) { model.Add(entityType.Clone()); } foreach (var enumType in schema.EnumTypes) { model.Add(enumType.Clone()); } foreach (var function in schema.Functions) { model.Add(function.Clone()); } model.Resolve(); return(model); }
/// <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(); }
/// <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(); }