/// <summary> /// Creates the object services. /// </summary> /// <param name="modelSchema">The entity model schema.</param> /// <param name="conceptualDataServices">The structural generators for the specified entity model schema</param> /// <param name="assemblies">The assemblies that contain data classes for the specified entity model schema.</param> /// <returns>Entity model object services.</returns> public IEntityModelObjectServices CreateObjectServices(EntityModelSchema modelSchema, IEntityModelConceptualDataServices conceptualDataServices, IEnumerable <Assembly> assemblies) { ExceptionUtilities.CheckArgumentNotNull(modelSchema, "modelSchema"); ExceptionUtilities.CheckArgumentNotNull(conceptualDataServices, "conceptualDataServices"); ExceptionUtilities.CheckArgumentNotNull(assemblies, "assemblies"); EntityModelObjectServices services = new EntityModelObjectServices(conceptualDataServices); this.RegisterDataGeneratorAndAdaptersForComplexTypes(modelSchema, conceptualDataServices, services, assemblies); List <EntityType> processedEntityTypes = new List <EntityType>(); foreach (EntityContainer entityContainer in modelSchema.EntityContainers) { var graphCreator = new EntityGraphCreator(entityContainer) { ConceptualDataServices = conceptualDataServices, ObjectServices = services, Random = this.Random }; services.RegisterGraphCreator(graphCreator, entityContainer); foreach (EntitySet entitySet in entityContainer.EntitySets) { string entitySetName = entityContainer.Name + "." + entitySet.Name; foreach (EntityType entityType in modelSchema.EntityTypes.Where(t => t.IsKindOf(entitySet.EntityType) && !t.IsAbstract)) { INamedValuesGenerator structuralGenerator = conceptualDataServices.GetStructuralGenerator(entityType.FullName, entitySetName); Type clrType = this.GetClrType(entityType, assemblies); IStructuralDataAdapter adapter = new ObjectStructuralDataAdapter(clrType); IDataGenerator objectDataGen = this.CreateObjectDataGenerator(clrType, adapter, structuralGenerator); EntitySetObjectDataGenerator entitySetObjectDataGen = new EntitySetObjectDataGenerator(entitySetName, objectDataGen); services.RegisterEntitySetDataGenerator(entitySetObjectDataGen, entityType, entitySetName); services.RegisterDataGenerator(objectDataGen, entityType, entitySetName); if (!processedEntityTypes.Contains(entityType)) { services.RegisterDataAdapter(adapter, entityType); this.RegisterEnumTypes(entityType, services, assemblies); } processedEntityTypes.Add(entityType); } } } return(services); }
private void RegisterDataGeneratorAndAdaptersForComplexTypes(EntityModelSchema model, IEntityModelConceptualDataServices structuralDataServices, EntityModelObjectServices services, IEnumerable <Assembly> assemblies) { foreach (ComplexType complexType in model.ComplexTypes) { INamedValuesGenerator structuralGenerator = structuralDataServices.GetStructuralGenerator(complexType.FullName); Type clrType = this.GetClrType(complexType, assemblies); IStructuralDataAdapter adapter = new ObjectStructuralDataAdapter(clrType); IDataGenerator objectDataGen = this.CreateObjectDataGenerator(clrType, adapter, structuralGenerator); services.RegisterDataGenerator(objectDataGen, complexType); services.RegisterDataAdapter(adapter, complexType); } }
private void RegisterEnumType(EntityType entityType, string propertyPath, DataType propertyType, EntityModelObjectServices services, IEnumerable <Assembly> assemblies) { var enumDataType = propertyType as EnumDataType; if (enumDataType != null) { Type clrEnumType = this.GetClrType(enumDataType.Definition, assemblies); services.RegisterEnumType(clrEnumType, entityType, propertyPath); } }
private void RegisterEnumTypes(EntityType entityType, EntityModelObjectServices services, IEnumerable <Assembly> assemblies) { entityType.GetPropertyPaths((path, property) => { this.RegisterEnumType(entityType, path, property.PropertyType, services, assemblies); return(true); }); }