Ejemplo n.º 1
0
        public void WriteFunctionImportMappingElement(FunctionImportMappingComposable functionImportMapping)
        {
            DebugCheck.NotNull(functionImportMapping);

            _xmlWriter.WriteStartElement(StorageMslConstructs.FunctionImportMappingElement);
            _xmlWriter.WriteAttributeString(
                StorageMslConstructs.FunctionImportMappingFunctionNameAttribute,
                functionImportMapping.TargetFunction.FullName);
            _xmlWriter.WriteAttributeString(
                StorageMslConstructs.FunctionImportMappingFunctionImportNameAttribute,
                functionImportMapping.FunctionImport.Name);
            _xmlWriter.WriteStartElement(StorageMslConstructs.FunctionImportMappingResultMapping);

            Debug.Assert(
                functionImportMapping.StructuralTypeMappings.Count == 1,
                "multiple result sets not supported.");
            Debug.Assert(
                functionImportMapping.StructuralTypeMappings.First().Item1.BuiltInTypeKind == BuiltInTypeKind.ComplexType,
                "mapping to entity sets not supported.");

            var structuralMapping = functionImportMapping.StructuralTypeMappings.Single();

            _xmlWriter.WriteStartElement(StorageMslConstructs.ComplexTypeMappingElement);
            _xmlWriter.WriteAttributeString(StorageMslConstructs.ComplexTypeMappingTypeNameAttribute, structuralMapping.Item1.FullName);
            foreach (StorageScalarPropertyMapping propertyMapping in structuralMapping.Item3)
            {
                WritePropertyMapping(propertyMapping);
            }

            _xmlWriter.WriteEndElement();
            _xmlWriter.WriteEndElement();
            _xmlWriter.WriteEndElement();
        }
 public void WriteFunctionImportMappingElement(
     FunctionImportMappingComposable functionImportMapping)
 {
     this.WriteFunctionImportMappingStartElement((FunctionImportMapping)functionImportMapping);
     if (functionImportMapping.StructuralTypeMappings != null)
     {
         this._xmlWriter.WriteStartElement("ResultMapping");
         Tuple <StructuralType, List <ConditionPropertyMapping>, List <PropertyMapping> > tuple = functionImportMapping.StructuralTypeMappings.Single <Tuple <StructuralType, List <ConditionPropertyMapping>, List <PropertyMapping> > >();
         if (tuple.Item1.BuiltInTypeKind == BuiltInTypeKind.ComplexType)
         {
             this._xmlWriter.WriteStartElement("ComplexTypeMapping");
             this._xmlWriter.WriteAttributeString("TypeName", tuple.Item1.FullName);
         }
         else
         {
             this._xmlWriter.WriteStartElement("EntityTypeMapping");
             this._xmlWriter.WriteAttributeString("TypeName", tuple.Item1.FullName);
             foreach (ConditionPropertyMapping condition in tuple.Item2)
             {
                 this.WriteConditionElement(condition);
             }
         }
         foreach (PropertyMapping propertyMapping in tuple.Item3)
         {
             this.WritePropertyMapping(propertyMapping);
         }
         this._xmlWriter.WriteEndElement();
         this._xmlWriter.WriteEndElement();
     }
     this.WriteFunctionImportEndElement();
 }
Ejemplo n.º 3
0
        public void WriteFunctionImportMappingElement_does_not_write_result_mapping_when_result_mapped_to_primitive_type()
        {
            var typeUsage =
                TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32));

            var functionImport =
                new EdmFunction(
                    "f_c", "Ns", DataSpace.CSpace,
                    new EdmFunctionPayload
            {
                IsComposable     = true,
                IsFunctionImport = true,
                ReturnParameters =
                    new[]
                {
                    new FunctionParameter(
                        "ReturnValue",
                        TypeUsage.CreateDefaultTypeUsage(typeUsage.EdmType.GetCollectionType()),
                        ParameterMode.ReturnValue)
                },
            });

            var rowTypeProperty =
                new EdmProperty("RTProperty1", ProviderRegistry.Sql2008_ProviderManifest.GetStoreType(typeUsage));
            var rowType = new RowType(new[] { rowTypeProperty });

            var storeFunction =
                new EdmFunction(
                    "f_s", "Ns.Store", DataSpace.SSpace,
                    new EdmFunctionPayload
            {
                ReturnParameters =
                    new[]
                {
                    new FunctionParameter(
                        "Return",
                        TypeUsage.CreateDefaultTypeUsage(rowType.GetCollectionType()),
                        ParameterMode.ReturnValue)
                },
            });

            var functionImportMapping = new FunctionImportMappingComposable(
                functionImport,
                storeFunction,
                new FunctionImportResultMapping(),
                new EntityContainerMapping(new EntityContainer("C", DataSpace.SSpace)));

            var fixture = new Fixture();

            fixture.Writer.WriteFunctionImportMappingElement(functionImportMapping);

            Assert.Equal(
                @"<FunctionImportMapping FunctionName=""Ns.Store.f_s"" FunctionImportName=""f_c"" />",
                fixture.ToString());
        }
Ejemplo n.º 4
0
        public void WriteFunctionImportMappingElement(FunctionImportMappingComposable functionImportMapping)
        {
            DebugCheck.NotNull(functionImportMapping);

            WriteFunctionImportMappingStartElement(functionImportMapping);

            // no mapping written when mapping to a scalar
            if (functionImportMapping.StructuralTypeMappings != null)
            {
                _xmlWriter.WriteStartElement(MslConstructs.FunctionImportMappingResultMapping);

                Debug.Assert(
                    functionImportMapping.StructuralTypeMappings.Count == 1,
                    "multiple result sets not supported.");

                var structuralMapping = functionImportMapping.StructuralTypeMappings.Single();

                if (structuralMapping.Item1.BuiltInTypeKind == BuiltInTypeKind.ComplexType)
                {
                    _xmlWriter.WriteStartElement(MslConstructs.ComplexTypeMappingElement);
                    _xmlWriter.WriteAttributeString(MslConstructs.ComplexTypeMappingTypeNameAttribute, structuralMapping.Item1.FullName);
                }
                else
                {
                    Debug.Assert(structuralMapping.Item1.BuiltInTypeKind == BuiltInTypeKind.EntityType, "Unexpected return type");

                    _xmlWriter.WriteStartElement(MslConstructs.EntityTypeMappingElement);
                    _xmlWriter.WriteAttributeString(MslConstructs.EntityTypeMappingTypeNameAttribute, structuralMapping.Item1.FullName);

                    foreach (var conditionMapping in structuralMapping.Item2)
                    {
                        WriteConditionElement(conditionMapping);
                    }
                }

                foreach (var propertyMapping in structuralMapping.Item3)
                {
                    WritePropertyMapping(propertyMapping);
                }

                _xmlWriter.WriteEndElement();
                _xmlWriter.WriteEndElement();
            }

            WriteFunctionImportEndElement();
        }
        public void WriteEntityContainerMappingElement_should_write_function_import_elements()
        {
            var typeUsage =
                TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32));

            var complexTypeProperty1 = new EdmProperty("CTProperty1", typeUsage);
            var complexTypeProperty2 = new EdmProperty("CTProperty2", typeUsage);

            var complexType = new ComplexType("CT", "Ns", DataSpace.CSpace);

            complexType.AddMember(complexTypeProperty1);
            complexType.AddMember(complexTypeProperty2);

            var functionImport =
                new EdmFunction(
                    "f_c", "Ns", DataSpace.CSpace,
                    new EdmFunctionPayload
            {
                IsComposable     = true,
                IsFunctionImport = true,
                ReturnParameters =
                    new[]
                {
                    new FunctionParameter(
                        "ReturnValue",
                        TypeUsage.CreateDefaultTypeUsage(complexType.GetCollectionType()),
                        ParameterMode.ReturnValue)
                },
                Parameters =
                    new[]
                {
                    new FunctionParameter("param", typeUsage, ParameterMode.Out)
                }
            });

            var rowTypeProperty1 = new EdmProperty("RTProperty1", typeUsage);
            var rowTypeProperty2 = new EdmProperty("RTProperty2", typeUsage);
            var rowType          = new RowType(new[] { rowTypeProperty1, rowTypeProperty2 });

            var storeFunction =
                new EdmFunction(
                    "f_s", "Ns.Store", DataSpace.SSpace,
                    new EdmFunctionPayload
            {
                ReturnParameters =
                    new[]
                {
                    new FunctionParameter(
                        "Return",
                        TypeUsage.CreateDefaultTypeUsage(rowType),
                        ParameterMode.ReturnValue)
                },
                Parameters =
                    new[]
                {
                    new FunctionParameter("param", typeUsage, ParameterMode.Out)
                }
            });

            var structuralTypeMapping =
                new Tuple <StructuralType, List <StorageConditionPropertyMapping>, List <StoragePropertyMapping> >(
                    complexType, new List <StorageConditionPropertyMapping>(), new List <StoragePropertyMapping>());

            structuralTypeMapping.Item3.Add(new StorageScalarPropertyMapping(complexTypeProperty1, rowTypeProperty1));
            structuralTypeMapping.Item3.Add(new StorageScalarPropertyMapping(complexTypeProperty2, rowTypeProperty2));

            var functionImportMapping = new FunctionImportMappingComposable(
                functionImport,
                storeFunction,
                new List <Tuple <StructuralType, List <StorageConditionPropertyMapping>, List <StoragePropertyMapping> > >
            {
                structuralTypeMapping
            });

            var containerMapping = new StorageEntityContainerMapping(new EntityContainer("C", DataSpace.SSpace));

            containerMapping.AddFunctionImportMapping(functionImportMapping);

            var fixture = new Fixture();

            fixture.Writer.WriteEntityContainerMappingElement(containerMapping);

            Assert.Equal(
                @"<EntityContainerMapping StorageEntityContainer="""" CdmEntityContainer=""C"">
  <FunctionImportMapping FunctionName=""Ns.Store.f_s"" FunctionImportName=""f_c"">
    <ResultMapping>
      <ComplexTypeMapping TypeName=""Ns.CT"">
        <ScalarProperty Name=""CTProperty1"" ColumnName=""RTProperty1"" />
        <ScalarProperty Name=""CTProperty2"" ColumnName=""RTProperty2"" />
      </ComplexTypeMapping>
    </ResultMapping>
  </FunctionImportMapping>
</EntityContainerMapping>",
                fixture.ToString());
        }