Пример #1
0
            private IEdmComplexType BuildComplexType(EntityElement entityElement)
            {
                var entityType = new EdmComplexType(_namespaceName, entityElement.ResolveName());

                foreach (var propertyElement in entityElement.Properties)
                {
                    var propertyName = propertyElement.ResolveName();
                    var propertyType = BuildPropertyType(propertyElement);

                    entityType.AddStructuralProperty(propertyName, propertyType);
                }

                foreach (var relationElement in entityElement.Relations)
                {
                    var propertyName   = relationElement.ResolveName();
                    var structuredType = BuildSchemaType(relationElement.Target);

                    if (structuredType is IEdmComplexType)
                    {
                        var typeReference = BuildTypeReference(relationElement);
                        entityType.AddStructuralProperty(propertyName, typeReference);
                    }
                }

                return(entityType);
            }
        private static void ConfigureTable(TypeConventionConfiguration configuration, EntityElement tableElement)
        {
            string schemaName;
            var    tableName = tableElement.ResolveName();

            ParseTableName(ref tableName, out schemaName);

            configuration.Configure(x => x.ToTable(tableName, schemaName));
            configuration.Configure(x => x.HasTableAnnotation(AnnotationKey, tableElement.Identity.Id));
        }
Пример #3
0
            public IEdmStructuredType ResolveComplexType(EntityElement entityElement)
            {
                var typeName = entityElement.ResolveName();

                IEdmSchemaType complexType;

                if (!_registeredTypes.TryGetValue(typeName, out complexType))
                {
                    _registeredTypes.Add(typeName,
                                         complexType = entityElement.KeyProperties.Any()
                        ? (IEdmSchemaType)BuildEntityType(typeName, entityElement)
                        : (IEdmSchemaType)BuildComplexType(typeName, entityElement));

                    AnnotateElement(complexType, entityElement.Identity.Id);
                }

                return((IEdmStructuredType)complexType);
            }
Пример #4
0
            private IEdmEntityType BuildEntityType(EntityElement entityElement)
            {
                var entityType = new EdmEntityType(_namespaceName, entityElement.ResolveName());
                var keyIds     = new HashSet <IMetadataElementIdentity>(entityElement.KeyProperties.Select(x => x.Identity));

                foreach (var propertyElement in entityElement.Properties)
                {
                    var propertyName = propertyElement.ResolveName();
                    var propertyType = BuildPropertyType(propertyElement);

                    var property = entityType.AddStructuralProperty(propertyName, propertyType);
                    if (keyIds.Contains(propertyElement.Identity))
                    {
                        entityType.AddKeys(property);
                    }
                }

                foreach (var relationElement in entityElement.Relations)
                {
                    var propertyName   = relationElement.ResolveName();
                    var structuredType = BuildSchemaType(relationElement.Target);

                    if (structuredType is IEdmComplexType)
                    {
                        var typeReference = BuildTypeReference(relationElement);
                        entityType.AddStructuralProperty(propertyName, typeReference);
                    }

                    var relatedEntityType = structuredType as IEdmEntityType;
                    if (relatedEntityType != null)
                    {
                        entityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo
                        {
                            Name               = propertyName,
                            ContainsTarget     = relationElement.ContainsTarget,
                            Target             = relatedEntityType,
                            TargetMultiplicity = Convert(relationElement.Cardinality)
                        });
                    }
                }

                return(entityType);
            }
Пример #5
0
            public IEdmStructuredType ResolveComplexType(EntityElement entityElement)
            {
                var typeName = entityElement.ResolveName();

                IEdmSchemaType complexType;
                if (!_registeredTypes.TryGetValue(typeName, out complexType))
                {
                    _registeredTypes.Add(typeName,
                        complexType = entityElement.KeyProperties.Any()
                        ? (IEdmSchemaType)BuildEntityType(typeName, entityElement)
                        : (IEdmSchemaType)BuildComplexType(typeName, entityElement));

                    AnnotateElement(complexType, entityElement.Identity.Id);
                }

                return (IEdmStructuredType)complexType;
            }
        private static void ConfigureEntity(TypeConventionConfiguration configuration, EntityElement entityElement)
        {
            // add annotation
            configuration.Configure(x => x.HasTableAnnotation(AnnotationKey, entityElement.Identity.Id));

            // update entity set name
            configuration.Configure(x => x.HasEntitySetName(entityElement.EntitySetName ?? entityElement.ResolveName()));

            // declare keys
            configuration.Configure(x => x.HasKey(entityElement.KeyProperties.Select(p => p.ResolveName())));

            foreach (var propertyElement in entityElement.Properties)
            {
                var propertyType = propertyElement.PropertyType;
                if (propertyType.TypeKind == StructuralModelTypeKind.Enum)
                {
                    continue;
                }

                var propertyName = propertyElement.ResolveName();
                if (propertyElement.IsNullable)
                {
                    configuration.Configure(x => x.Property(propertyName).IsOptional());
                }
                else
                {
                    configuration.Configure(x => x.Property(propertyName).IsRequired());
                }
            }
        }
Пример #7
0
            private IEdmComplexType BuildComplexType(EntityElement entityElement)
            {
                var entityType = new EdmComplexType(_namespaceName, entityElement.ResolveName());

                foreach (var propertyElement in entityElement.Properties)
                {
                    var propertyName = propertyElement.ResolveName();
                    var propertyType = BuildPropertyType(propertyElement);

                    entityType.AddStructuralProperty(propertyName, propertyType);
                }

                foreach (var relationElement in entityElement.Relations)
                {
                    var propertyName = relationElement.ResolveName();
                    var structuredType = BuildSchemaType(relationElement.Target);

                    if (structuredType is IEdmComplexType)
                    {
                        var typeReference = BuildTypeReference(relationElement);
                        entityType.AddStructuralProperty(propertyName, typeReference);
                    }
                }

                return entityType;
            }
Пример #8
0
            private IEdmEntityType BuildEntityType(EntityElement entityElement)
            {
                var entityType = new EdmEntityType(_namespaceName, entityElement.ResolveName());
                var keyIds = new HashSet<IMetadataElementIdentity>(entityElement.KeyProperties.Select(x => x.Identity));

                foreach (var propertyElement in entityElement.Properties)
                {
                    var propertyName = propertyElement.ResolveName();
                    var propertyType = BuildPropertyType(propertyElement);

                    var property = entityType.AddStructuralProperty(propertyName, propertyType);
                    if (keyIds.Contains(propertyElement.Identity))
                    {
                        entityType.AddKeys(property);
                    }
                }

                foreach (var relationElement in entityElement.Relations)
                {
                    var propertyName = relationElement.ResolveName();
                    var structuredType = BuildSchemaType(relationElement.Target);

                    if (structuredType is IEdmComplexType)
                    {
                        var typeReference = BuildTypeReference(relationElement);
                        entityType.AddStructuralProperty(propertyName, typeReference);
                    }

                    var relatedEntityType = structuredType as IEdmEntityType;
                    if (relatedEntityType != null)
                    {
                        entityType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo
                        {
                            Name = propertyName,
                            ContainsTarget = relationElement.ContainsTarget,
                            Target = relatedEntityType,
                            TargetMultiplicity = Convert(relationElement.Cardinality)
                        });
                    }
                }

                return entityType;
            }