/// <summary>
        /// Performs a deep copy of the specified <see cref="EntityContainer"/>.
        /// </summary>
        /// <param name="entityContainer">The <see cref="EntityContainer"/> to deep copy.</param>
        /// <returns>A deep copy of the <see cref="EntityContainer"/>.</returns>
        private static EntityContainer Clone(this EntityContainer entityContainer)
        {
            var clone = new EntityContainer(entityContainer.Name);

            CopyAnnotations(clone, entityContainer.Annotations);

            foreach (var entitySet in entityContainer.EntitySets)
            {
                clone.Add(entitySet.Clone());
            }

            foreach (var associationSet in entityContainer.AssociationSets)
            {
                clone.Add(associationSet.Clone());
            }

            foreach (var functionImport in entityContainer.FunctionImports)
            {
                clone.Add(functionImport.Clone());
            }

            return(clone);
        }
Example #2
0
        /// <summary>
        /// Parses an entity container element in the csdl/ssdl file.
        /// </summary>
        /// <param name="entityContainerElement">the entity container element to parse</param>
        /// <returns>the parsed entity container object in the entity model schema</returns>
        protected virtual EntityContainer ParseEntityContainer(XElement entityContainerElement)
        {
            string name = entityContainerElement.GetRequiredAttributeValue("Name");
            var entityContainer = new EntityContainer(name);
            foreach (var entitySetElement in entityContainerElement.Elements().Where(el => this.IsXsdlElement(el, "EntitySet")))
            {
                entityContainer.Add(this.ParseEntitySet(entitySetElement));
            }

            foreach (var entitySetElement in entityContainerElement.Elements().Where(el => this.IsXsdlElement(el, "AssociationSet")))
            {
                entityContainer.Add(this.ParseAssociationSet(entitySetElement));
            }

            this.ParseAnnotations(entityContainer, entityContainerElement);
            return entityContainer;
        }
        private EntityContainer ConvertToTaupoEntityContainer(IEdmEntityContainer edmEntityContainer)
        {
            var taupoEntityContainer = new EntityContainer(edmEntityContainer.Name);

            foreach (var edmEntitySet in edmEntityContainer.Elements.OfType<IEdmEntitySet>())
            {
                EntitySet taupoEntitySet = this.ConvertToTaupoEntitySet(edmEntitySet);
                taupoEntityContainer.Add(taupoEntitySet);

                foreach (var edmNavigationProperty in edmEntitySet.NavigationPropertyBindings.Select(t => t.NavigationProperty))
                {
                    if (!this.associationRegistry.IsAssociationSetRegistered(edmEntitySet, edmNavigationProperty))
                    {
                        this.associationRegistry.RegisterAssociationSet(edmEntitySet, edmNavigationProperty);
                    }
                }
            }

            foreach (var edmFunctionImport in edmEntityContainer.Elements.OfType<IEdmOperationImport>())
            {
                FunctionImport taupoFunctionImport = this.ConvertToTaupoFunctionImport(edmFunctionImport);
                taupoEntityContainer.Add(taupoFunctionImport);
            }

            this.ConvertAnnotationsIntoTaupo(edmEntityContainer, taupoEntityContainer);
            return taupoEntityContainer;
        }
Example #4
0
        private void CloneContainerContents(EntityContainer baseContainer, EntityContainer extendedContainer)
        {
            foreach (var entitySet in baseContainer.EntitySets)
            {
                var clonedEntitySet = new EntitySet(entitySet.Name, entitySet.EntityType);
                extendedContainer.Add(clonedEntitySet);
            }

            foreach (var associationSet in baseContainer.AssociationSets)
            {
                var clonedAssociationSet = new AssociationSet(associationSet.Name, associationSet.AssociationType);
                foreach (var setEnd in associationSet.Ends)
                {
                    clonedAssociationSet.Add(new AssociationSetEnd(setEnd.AssociationEnd, setEnd.EntitySet.Name));
                }

                extendedContainer.Add(clonedAssociationSet);
            }

            foreach (var functionImport in baseContainer.FunctionImports)
            {
                var clonedFunctionImport = new FunctionImport(functionImport.Name);
                foreach (var returnType in functionImport.ReturnTypes)
                {
                    clonedFunctionImport.ReturnTypes.Add(returnType);
                }

                foreach (var parameter in functionImport.Parameters)
                {
                    clonedFunctionImport.Add(new FunctionParameter(parameter.Name, parameter.DataType, parameter.Mode));
                }

                extendedContainer.Add(clonedFunctionImport);
            }
        }