コード例 #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(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);
        }
コード例 #3
0
 public void InitializeVersionsNavigationProperty(IBindableModelBuilder modelBuilder, IEntityTypeBuilder sourceTypeBuilder, IEntityTypeBuilder versionInfoTypeBuilder)
 {
     modelBuilder.WithBinding(
         sourceTypeBuilder.CreateContainedNavigationProperty(versionInfoTypeBuilder, FactonModelKeywords.VersionInfoNavigationPropertyName)
         .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.Many)
         .WithSupportedOperations(Operation.Get | Operation.Post),
         new VersionInfoNavigationPropertyBinding(this.factonQueryService, this.queryBuilderFactory));
 }
コード例 #4
0
 private static void AddContainerNavigationProperty(
     IBindableModelBuilder modelBuilder,
     IEntityTypeBuilder publicEntityType,
     IEntityTypeBuilder containerEntityType)
 {
     modelBuilder.WithBinding(
         publicEntityType.CreateContainedNavigationProperty(containerEntityType, FactonModelKeywords.ValueRuleContainerNavigationPropertyName)
         .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.One)
         .WithSupportedOperations(Operation.Get),
         new VirtualValueRuleContainerNavigationPropertyBinding());
 }
コード例 #5
0
 private static void RegisterVersionedEntityNavigationProperty(
     IBindableModelBuilder modelBuilder,
     IEntityTypeBuilder versionInfoTypeBuilder,
     IEntityTypeBuilder publicEntityTypeBuilder)
 {
     modelBuilder.WithBinding(
         versionInfoTypeBuilder.CreateContainedNavigationProperty(
             publicEntityTypeBuilder,
             FactonModelKeywords.VersionedEntityNavigationPropertyName)
         .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.One)
         .WithSupportedOperations(Operation.Get),
         new VersionedEntityNavigationPropertyBinding());
 }
コード例 #6
0
        public IEntitySetBuilder InitializeSet(
            IBindableModelBuilder modelBuilder,
            IEntityTypeBuilder entityTypeBuilder,
            ISignature signature,
            IEnumerable <string> entityTypes,
            string space)
        {
            var entitySetBuilder =
                modelBuilder.CreateEntitySetBuilder(this.GetSetName(signature), entityTypeBuilder)
                .WithSupportedOperations(Operation.Get | Operation.Post | Operation.Patch);

            modelBuilder.WithBinding(entitySetBuilder, this.CreateEntitySetBinding(signature, entityTypes, space));
            return(entitySetBuilder);
        }
コード例 #7
0
        private void AddTreePropertiesToPublicEntityType(
            ISignature treeSignature,
            IBindableModelBuilder modelBuilder,
            IEntityTypeBuilder dataTreeType,
            IEntityTypeBuilder publicEntityType)
        {
            foreach (var property in this.propertyService.GetSelectionTreePropertiesByTreeSignature(treeSignature))
            {
                modelBuilder.WithBinding(
                    publicEntityType.CreateUncontainedNavigationProperty(dataTreeType, property)
                    .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.One)
                    .WithSupportedOperations(Operation.Get),
                    new SelectionTreeValueNavigationPropertyBinding(property));
            }

            foreach (var property in this.propertyService.GetSelectionTreeValueListPropertiesByTreeSignature(treeSignature))
            {
                modelBuilder.WithBinding(
                    publicEntityType.CreateUncontainedNavigationProperty(dataTreeType, property)
                    .WithMultiplicity(EdmMultiplicity.One, EdmMultiplicity.Many)
                    .WithSupportedOperations(Operation.Get),
                    new SelectionTreeValueListValueNavigationPropertyBinding(property));
            }
        }
コード例 #8
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);
        }
コード例 #9
0
        public IEntitySetBuilder InitializeSingleton(
            IBindableModelBuilder modelBuilder,
            IEntityTypeBuilder entityTypeBuilder,
            ISignature signature,
            IEnumerable <string> entityTypes,
            string space)
        {
            var singletonBuilder =
                modelBuilder.CreateEntitySetBuilder(this.GetSetName(signature), entityTypeBuilder)
                .AsSingleton()
                .WithSupportedOperations(Operation.Get | Operation.Patch);

            modelBuilder.WithBinding(
                singletonBuilder,
                new SignatureSingletonBinding(this.factonQueryService, this.queryBuilderFactory, signature, entityTypes, space));

            return(singletonBuilder);
        }