Пример #1
0
        public IEntityTypeBuilder Initialize(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType)
        {
            var valueRuleBuilder = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.ValueRuleEntityTypeName).WithParentType(publicEntityType);

            var valueRuleContainerBuilder = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.ValueRuleContainerTypeName);

            publicEntityType.KeyProperties.ForEach(keyProperty => valueRuleContainerBuilder.WithKeyProperty(keyProperty));

            foreach (var valueProperty in this.GetDimensionDependingProperties())
            {
                var valueRuleProperty =
                    valueRuleContainerBuilder.CreateContainedNavigationProperty(valueRuleBuilder, valueProperty)
                    .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.Many)
                    .WithSupportedOperations(Operation.Get | Operation.Post | Operation.Patch);

                var binding = new ConcreteValueRuleContainerNavigationPropertyBinding(
                    this.valueRuleService,
                    this.valueRuleMetadataService,
                    valueProperty);

                modelBuilder
                .WithBinding(valueRuleProperty, binding)
                .WithOptionalDependency(valueRuleProperty, publicEntityType.KeyProperties.First());
            }

            AddContainerNavigationProperty(modelBuilder, publicEntityType, valueRuleContainerBuilder);
            return(valueRuleContainerBuilder);
        }
Пример #2
0
        public IEntityTypeBuilder Initialize(IBindableModelBuilder modelBuilder)
        {
            var signatureProperty = this.CreateProperty(this.propertyService.CompactSignatureProperty, FactonModelKeywords.SignaturePropertyName);

            var publicEntityType =
                modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.PublicEntityTypeName)
                .AsAbstractType()
                .WithKeyProperty(CreateEntityIdProperty(this.structuralPropertyFactory))
                .WithStructuralProperty(signatureProperty);

            foreach (var property in this.propertyService.AllRelevantProperties)
            {
                IStructuralProperty structuralProperty;
                if (this.structuralPropertyFactory.TryCreate(property, out structuralProperty))
                {
                    publicEntityType.WithStructuralProperty(structuralProperty);
                }
                else
                {
                    this.logger.Write(TraceEventType.Error, $"Cannot create property {property.Name}: data type {property.DomainType} not mapped");
                }
            }

            return(publicEntityType);
        }
Пример #3
0
        public IEntityTypeBuilder Initialize(SignatureTypeConfiguration config, IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityType)
        {
            var typeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType)
                              .WithParentType(publicEntityType)
                              .WithStructuralProperty(this.quantityTypeProperty);

            foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType))
            {
                var setBuilder = this.signatureSetInitializer.InitializeSet(
                    modelBuilder,
                    typeBuilder,
                    signature,
                    config.RelevantEntityTypes,
                    "ResourceMasterdata");

                IEntitySetBinding existingBinding;
                if (!modelBuilder.TryGetBinding(setBuilder, out existingBinding))
                {
                    throw new InvalidOperationException("No existing bind found for resource entity set.");
                }

                modelBuilder
                .WithBinding(setBuilder, new ResourceEntitySetBinding(this.resourceService, signature, existingBinding))
                .WithDependency(setBuilder, this.quantityTypeProperty)
                .WithOptionalDependency(setBuilder, publicEntityType.KeyProperties.First());
            }

            return(typeBuilder);
        }
        public IEntityTypeBuilder Initialize(
            SignatureTypeConfiguration config,
            IBindableModelBuilder modelBuilder,
            IEntityTypeBuilder publicEntityType)
        {
            var typeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType).WithParentType(publicEntityType);

            foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType))
            {
                this.signatureSetInitializer.InitializeSingleton(
                    modelBuilder, typeBuilder, signature, config.RelevantEntityTypes, "GlobalMasterData");
            }

            return(typeBuilder);
        }
        public IEntityTypeBuilder Initialize(
            SignatureTypeConfiguration config,
            IBindableModelBuilder modelBuilder,
            IEntityTypeBuilder publicEntityType)
        {
            var typeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType).WithParentType(publicEntityType);

            var versionInfoTypeBuilder = this.versionInfoTypeInitializer.GetOrCreateVersionInfoType(modelBuilder, publicEntityType);

            this.versionInfoTypeInitializer.InitializeVersionsNavigationProperty(modelBuilder, typeBuilder, versionInfoTypeBuilder);

            foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType))
            {
                this.signatureSetInitializer.InitializeSet(modelBuilder, typeBuilder, signature, config.RelevantEntityTypes);
            }

            return(typeBuilder);
        }
Пример #6
0
        public IEntityTypeBuilder GetOrCreateVersionInfoType(IBindableModelBuilder modelBuilder, IEntityTypeBuilder publicEntityTypeBuilder)
        {
            IEntityTypeBuilder versionInfoTypeBuilder;

            if (!modelBuilder.TryGetEntityTypeBuilder(FactonModelKeywords.VersionInfoTypeName, out versionInfoTypeBuilder))
            {
                versionInfoTypeBuilder = modelBuilder.CreateEntityTypeBuilder(FactonModelKeywords.VersionInfoTypeName);
                IStructuralProperty versionNumberProperty;
                if (!this.structuralPropertyFactory.TryCreate(
                        this.metadataService.GetPropertyByName("_VersionNumber"),
                        "VersionNumber",
                        false,
                        out versionNumberProperty))
                {
                    throw new InvalidOperationException("Cannot map version number property.");
                }

                versionInfoTypeBuilder.WithParentType(publicEntityTypeBuilder).WithStructuralProperty(versionNumberProperty);
                RegisterVersionedEntityNavigationProperty(modelBuilder, versionInfoTypeBuilder, publicEntityTypeBuilder);
            }

            return(versionInfoTypeBuilder);
        }
Пример #7
0
        public IEntityTypeBuilder Initialize(
            SignatureTypeConfiguration config,
            IBindableModelBuilder modelBuilder,
            IEntityTypeBuilder publicEntityType)
        {
            var dataTreeTypeBuilder = modelBuilder.CreateEntityTypeBuilder(config.SignatureType).WithParentType(publicEntityType);
            var parentProperty      =
                dataTreeTypeBuilder.CreateUncontainedNavigationProperty(dataTreeTypeBuilder, FactonModelKeywords.TreeNodeParentNavigationPropertyName)
                .WithMultiplicity(EdmMultiplicity.Many, EdmMultiplicity.One)
                .WithSupportedOperations(Operation.Get);

            modelBuilder.WithBinding(parentProperty, new TreeNodeParentNavigationPropertyBinding());

            foreach (var signature in this.signatureSetInitializer.GetRelevantSignaturesByType(config.SignatureType))
            {
                var setBuilder =
                    this.signatureSetInitializer.InitializeSet(
                        modelBuilder, dataTreeTypeBuilder, signature, config.RelevantEntityTypes, this.space)
                    .WithUncontainedNavigationPropertySelfTarget(parentProperty);

                IEntitySetBinding existingBinding;
                if (!modelBuilder.TryGetBinding(setBuilder, out existingBinding))
                {
                    throw new InvalidOperationException("No existing binding found for tree node entity set.");
                }

                modelBuilder
                .WithBinding(setBuilder, new TreeNodeEntitySetBinding(existingBinding))
                .WithDependency(setBuilder, parentProperty)
                .WithOptionalDependency(setBuilder, publicEntityType.KeyProperties.First());

                this.AddTreePropertiesToPublicEntityType(signature, modelBuilder, dataTreeTypeBuilder, publicEntityType);
            }

            return(dataTreeTypeBuilder);
        }