public static IEdmModel SimpleCustomerOrderModel() { var model = new EdmModel(); var customerType = new EdmEntityType("Default", "Customer"); customerType.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32); customerType.AddStructuralProperty("FirstName", EdmPrimitiveTypeKind.String); customerType.AddStructuralProperty("LastName", EdmPrimitiveTypeKind.String); model.AddElement(customerType); var orderType = new EdmEntityType("Default", "Order"); orderType.AddStructuralProperty("ID", EdmPrimitiveTypeKind.Int32); orderType.AddStructuralProperty("Name", EdmPrimitiveTypeKind.String); model.AddElement(orderType); var addressType = new EdmComplexType("Default", "Address"); addressType.AddStructuralProperty("Street", EdmPrimitiveTypeKind.String); addressType.AddStructuralProperty("City", EdmPrimitiveTypeKind.String); addressType.AddStructuralProperty("State", EdmPrimitiveTypeKind.String); addressType.AddStructuralProperty("Country", EdmPrimitiveTypeKind.String); addressType.AddStructuralProperty("ZipCode", EdmPrimitiveTypeKind.String); model.AddElement(addressType); // Add navigations customerType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Orders", Target = orderType, TargetMultiplicity = EdmMultiplicity.Many }); orderType.AddUnidirectionalNavigation(new EdmNavigationPropertyInfo() { Name = "Customer", Target = customerType, TargetMultiplicity = EdmMultiplicity.One }); var container = new EdmEntityContainer("Default", "Container"); var customerSet = container.AddEntitySet("Customers", customerType); var orderSet = container.AddEntitySet("Orders", orderType); customerSet.AddNavigationTarget(customerType.NavigationProperties().Single(np => np.Name == "Orders"), orderSet); orderSet.AddNavigationTarget(orderType.NavigationProperties().Single(np => np.Name == "Customer"), customerSet); EntitySetLinkBuilderAnnotation linkAnnotation = new MockEntitySetLinkBuilderAnnotation(); model.SetEntitySetLinkBuilderAnnotation(customerSet, linkAnnotation); model.SetEntitySetLinkBuilderAnnotation(orderSet, linkAnnotation); model.AddElement(container); return model; }
public static IEdmModel BuildEdmModel(string containerNamespace, string containerName, IEnumerable<IStructuralTypeConfiguration> entityTypeConfigurations, IEnumerable<IEntitySetConfiguration> entitySetConfigurations) { if (entityTypeConfigurations == null) { throw Error.ArgumentNull("entityTypeConfigurations"); } if (entitySetConfigurations == null) { throw Error.ArgumentNull("entitySetConfigurations"); } EdmModel model = new EdmModel(); Dictionary<string, IEdmStructuredType> types = EdmTypeBuilder.GetTypes(entityTypeConfigurations) .OfType<IEdmStructuredType>() .ToDictionary(t => t.ToString()); foreach (IEdmStructuredType type in types.Values) { if (type.TypeKind == EdmTypeKind.Complex) { model.AddElement(type as IEdmComplexType); } else if (type.TypeKind == EdmTypeKind.Entity) { model.AddElement(type as IEdmEntityType); } else { throw Error.InvalidOperation(SRResources.UnsupportedEntityTypeInModel); } } if (entitySetConfigurations.Any()) { EdmEntityContainer container = new EdmEntityContainer(containerNamespace, containerName); Dictionary<string, EdmEntitySet> edmEntitySetMap = new Dictionary<string, EdmEntitySet>(); foreach (IEntitySetConfiguration entitySet in entitySetConfigurations) { EdmEntitySet edmEntitySet = container.AddEntitySet(entitySet.Name, (IEdmEntityType)types[entitySet.EntityType.FullName]); EntitySetLinkBuilderAnnotation entitySetLinkBuilderAnnotation = new EntitySetLinkBuilderAnnotation(entitySet); model.SetEntitySetLinkBuilderAnnotation(edmEntitySet, entitySetLinkBuilderAnnotation); model.SetAnnotationValue<EntitySetUrlAnnotation>(edmEntitySet, new EntitySetUrlAnnotation { Url = entitySet.GetUrl() }); edmEntitySetMap.Add(edmEntitySet.Name, edmEntitySet); } foreach (IEntitySetConfiguration entitySet in entitySetConfigurations) { EdmEntitySet edmEntitySet = edmEntitySetMap[entitySet.Name]; EntitySetLinkBuilderAnnotation entitySetLinkBuilderAnnotation = model.GetEntitySetLinkBuilder(edmEntitySet) as EntitySetLinkBuilderAnnotation; foreach (NavigationPropertyConfiguration navigation in entitySet.EntityType.NavigationProperties) { NavigationPropertyBinding binding = entitySet.FindBinding(navigation); if (binding != null) { EdmEntityType edmEntityType = types[entitySet.EntityType.FullName] as EdmEntityType; IEdmNavigationProperty edmNavigationProperty = edmEntityType.NavigationProperties().Single(np => np.Name == navigation.Name); edmEntitySet.AddNavigationTarget(edmNavigationProperty, edmEntitySetMap[binding.EntitySet.Name]); entitySetLinkBuilderAnnotation.AddNavigationPropertyLinkBuilder(edmNavigationProperty, entitySet.GetNavigationPropertyLink(edmNavigationProperty.Name)); } } } model.AddElement(container); } return model; }