Exemple #1
0
        private static IEnumerable <XElement> MappingComplexProperties(TypeBase type, MappingBase mapping, EDMObjects.SSDL.EntityType.EntityType table, string entityContainerNamespace)
        {
            foreach (ComplexProperty complexProperty in type.AllComplexProperties)
            {
                ComplexPropertyMapping complexPropertyMapping = mapping.GetEntityTypeSpecificComplexPropertyMapping(complexProperty);

                if (complexPropertyMapping != null)
                {
                    XElement complexPropertyElement = new XElement(mslNamespace + "ComplexProperty",
                                                                   new XAttribute("Name", complexProperty.Name));

                    IEnumerable <PropertyMapping> scalarMappings = complexPropertyMapping.GetSpecificMappingForTable(table);

                    foreach (PropertyMapping scalarMapping in scalarMappings)
                    {
                        complexPropertyElement.AddElement(new XElement(mslNamespace + "ScalarProperty",
                                                                       new XAttribute("Name", scalarMapping.Property.Name),
                                                                       new XAttribute("ColumnName", scalarMapping.Column.Name)));
                    }

                    foreach (ComplexProperty subComplexProperty in complexProperty.ComplexType.ComplexProperties)
                    {
                        complexPropertyElement.Add(MappingComplexProperties(complexProperty.ComplexType, complexPropertyMapping, table, entityContainerNamespace));
                    }

                    yield return(complexPropertyElement);
                }
            }
        }
Exemple #2
0
        private IEnumerable <EfColumnInfo> DecodeComplexTypes(ComplexPropertyMapping complexMapping, Type parentClass)
        {
            //throw new NotImplementedException("We do not currently handle complex properties");
            var complexCols = new List <EfColumnInfo>();

            foreach (var property in complexMapping.TypeMappings.SelectMany(x => x.PropertyMappings))
            {
                var complexClrType =
                    Ef6MetadataDecoder.GetPublicAndPrivatePropertyByName(parentClass, complexMapping.Property.Name)
                    .PropertyType;
                if (property.Property.IsComplexType)
                {
                    complexCols.AddRange(DecodeComplexTypes((ComplexPropertyMapping)property, complexClrType));
                }
                else
                {
                    var columnName  = ((ScalarPropertyMapping)property).Column.Name;
                    var sqlTypeName = _tableEntitySet.ElementType.DeclaredMembers
                                      .Single(x => x.Name == columnName).TypeUsage.EdmType.Name;
                    var clrProperty = Ef6MetadataDecoder.GetPublicAndPrivatePropertyByName(complexClrType, property.Property.Name);
                    complexCols.Add(new EfColumnInfo(columnName, sqlTypeName, property.Property.Nullable,
                                                     property.Property.MaxLength, property.Property.Precision, null, clrProperty));
                }
            }
            return(complexCols);
        }
Exemple #3
0
 private void ExtractProperties(
     IEnumerable <PropertyMapping> properties,
     MemberPath cNode,
     List <ProjectedSlot> cSlots,
     ref BoolExpression cQueryWhereClause,
     MemberPath sRootExtent,
     List <ProjectedSlot> sSlots,
     ref BoolExpression sQueryWhereClause)
 {
     foreach (PropertyMapping property in properties)
     {
         ScalarPropertyMapping    scalarPropertyMapping  = property as ScalarPropertyMapping;
         ComplexPropertyMapping   complexPropertyMapping = property as ComplexPropertyMapping;
         EndPropertyMapping       endPropertyMapping     = property as EndPropertyMapping;
         ConditionPropertyMapping conditionMap           = property as ConditionPropertyMapping;
         if (scalarPropertyMapping != null)
         {
             MemberPath node1 = new MemberPath(cNode, (EdmMember)scalarPropertyMapping.Property);
             MemberPath node2 = new MemberPath(sRootExtent, (EdmMember)scalarPropertyMapping.Column);
             cSlots.Add((ProjectedSlot) new MemberProjectedSlot(node1));
             sSlots.Add((ProjectedSlot) new MemberProjectedSlot(node2));
         }
         if (complexPropertyMapping != null)
         {
             foreach (ComplexTypeMapping typeMapping in complexPropertyMapping.TypeMappings)
             {
                 MemberPath            memberPath = new MemberPath(cNode, (EdmMember)complexPropertyMapping.Property);
                 Set <EdmType>         set        = new Set <EdmType>();
                 IEnumerable <EdmType> elements   = Helpers.AsSuperTypeList <ComplexType, EdmType>((IEnumerable <ComplexType>)typeMapping.Types);
                 set.AddRange(elements);
                 foreach (EdmType isOfType in typeMapping.IsOfTypes)
                 {
                     set.AddRange(MetadataHelper.GetTypeAndSubtypesOf(isOfType, (ItemCollection)this.m_containerMapping.StorageMappingItemCollection.EdmItemCollection, false));
                 }
                 BoolExpression literal = BoolExpression.CreateLiteral((BoolLiteral) new TypeRestriction(memberPath, (IEnumerable <EdmType>)set), (MemberDomainMap)null);
                 cQueryWhereClause = BoolExpression.CreateAnd(cQueryWhereClause, literal);
                 this.ExtractProperties((IEnumerable <PropertyMapping>)typeMapping.AllProperties, memberPath, cSlots, ref cQueryWhereClause, sRootExtent, sSlots, ref sQueryWhereClause);
             }
         }
         if (endPropertyMapping != null)
         {
             MemberPath cNode1 = new MemberPath(cNode, (EdmMember)endPropertyMapping.AssociationEnd);
             this.ExtractProperties((IEnumerable <PropertyMapping>)endPropertyMapping.PropertyMappings, cNode1, cSlots, ref cQueryWhereClause, sRootExtent, sSlots, ref sQueryWhereClause);
         }
         if (conditionMap != null)
         {
             if (conditionMap.Column != null)
             {
                 BoolExpression conditionExpression = CellCreator.GetConditionExpression(sRootExtent, conditionMap);
                 sQueryWhereClause = BoolExpression.CreateAnd(sQueryWhereClause, conditionExpression);
             }
             else
             {
                 BoolExpression conditionExpression = CellCreator.GetConditionExpression(cNode, conditionMap);
                 cQueryWhereClause = BoolExpression.CreateAnd(cQueryWhereClause, conditionExpression);
             }
         }
     }
 }
 private void WritePropertyMapping(ComplexPropertyMapping complexPropertyMapping)
 {
     this._xmlWriter.WriteStartElement("ComplexProperty");
     this._xmlWriter.WriteAttributeString("Name", complexPropertyMapping.Property.Name);
     this._xmlWriter.WriteAttributeString("TypeName", this._entityTypeNamespace + "." + complexPropertyMapping.Property.ComplexType.Name);
     foreach (PropertyMapping propertyMapping in complexPropertyMapping.TypeMappings.Single <ComplexTypeMapping>().PropertyMappings)
     {
         this.WritePropertyMapping(propertyMapping);
     }
     this._xmlWriter.WriteEndElement();
 }
Exemple #5
0
        private void WritePropertyMapping(ComplexPropertyMapping complexPropertyMapping)
        {
            DebugCheck.NotNull(complexPropertyMapping);

            _xmlWriter.WriteStartElement(MslConstructs.ComplexPropertyElement);
            _xmlWriter.WriteAttributeString(MslConstructs.ComplexPropertyNameAttribute, complexPropertyMapping.Property.Name);
            _xmlWriter.WriteAttributeString(
                MslConstructs.ComplexPropertyTypeNameAttribute,
                _entityTypeNamespace + "." + complexPropertyMapping.Property.ComplexType.Name);

            foreach (var propertyMapping in complexPropertyMapping.TypeMappings.Single().PropertyMappings)
            {
                WritePropertyMapping(propertyMapping);
            }

            _xmlWriter.WriteEndElement();
        }
        private void WritePropertyMapping(PropertyMapping propertyMapping)
        {
            ScalarPropertyMapping scalarPropertyMapping = propertyMapping as ScalarPropertyMapping;

            if (scalarPropertyMapping != null)
            {
                this.WritePropertyMapping(scalarPropertyMapping);
            }
            else
            {
                ComplexPropertyMapping complexPropertyMapping = propertyMapping as ComplexPropertyMapping;
                if (complexPropertyMapping == null)
                {
                    return;
                }
                this.WritePropertyMapping(complexPropertyMapping);
            }
        }
Exemple #7
0
 private static IEnumerable <PropertyMapping> FlattenPropertyMappings(
     ReadOnlyCollection <PropertyMapping> propertyMappings)
 {
     foreach (PropertyMapping propertyMapping in propertyMappings)
     {
         ComplexPropertyMapping complexPropertyMapping = propertyMapping as ComplexPropertyMapping;
         if (complexPropertyMapping != null)
         {
             foreach (ComplexTypeMapping typeMapping in complexPropertyMapping.TypeMappings)
             {
                 foreach (PropertyMapping flattenPropertyMapping in ViewLoader.FlattenPropertyMappings(typeMapping.AllProperties))
                 {
                     yield return(flattenPropertyMapping);
                 }
             }
         }
         else
         {
             yield return(propertyMapping);
         }
     }
 }
        /// <summary>
        /// Gets the name of the column for the property wihin a complex type from the metadata.
        /// </summary>
        /// <param name="complexPropertyMapping">EF metadata for finding mappings from conceptual model to db.</param>
        /// <param name="complexProperty">The complex property containing the enumProperty.</param>
        /// <param name="enumProperty">The property we want column name for.</param>
        /// <returns>The column name for the enumProperty</returns>
        /// <exception cref="EnumGeneratorException">
        /// </exception>
        private static string GetColumnNameForEnumWithinComplexProperty(ComplexPropertyMapping complexPropertyMapping, EdmProperty complexProperty, EdmProperty enumProperty)
        {
            var complexTypeMappings = complexPropertyMapping.TypeMappings;

            if (complexTypeMappings.Count() != 1)
            {
                throw new EnumGeneratorException(string.Format(
                                                     "{0} complexPropertyMapping TypeMappings found for property {1}.{2}", complexTypeMappings.Count(), complexProperty, enumProperty));
            }
            var complexTypeMapping = complexTypeMappings.Single();
            var propertyMappings   = complexTypeMapping.PropertyMappings.Where(pm => pm.Property.Name == enumProperty.Name).ToList();

            if (propertyMappings.Count() != 1)
            {
                throw new EnumGeneratorException(string.Format(
                                                     "{0} complexMappings found for property {1}.{2}", propertyMappings.Count(), complexProperty, enumProperty));
            }

            var propertyMapping = propertyMappings.Single();


            return(GetColumnNameFromPropertyMapping(complexProperty, propertyMapping));
        }