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)); }
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 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); }
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()); } } }
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 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; }