private static EntityColumnMap CreateEntityTypeElementColumnMap(
            DbDataReader storeDataReader,
            EdmType edmType,
            EntitySet entitySet,
            ColumnMap[] propertyColumnMaps,
            Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping> renameList)
        {
            EntityType entityType = (EntityType)edmType;

            ColumnMap[] columnMapArray = new ColumnMap[storeDataReader.FieldCount];
            foreach (ColumnMap propertyColumnMap in propertyColumnMaps)
            {
                int columnPos = ((ScalarColumnMap)propertyColumnMap).ColumnPos;
                columnMapArray[columnPos] = propertyColumnMap;
            }
            IList <EdmMember> keyMembers = (IList <EdmMember>)entityType.KeyMembers;

            SimpleColumnMap[] keyColumns = new SimpleColumnMap[keyMembers.Count];
            int index = 0;

            foreach (EdmMember member in (IEnumerable <EdmMember>)keyMembers)
            {
                int       ordinalFromReader = ColumnMapFactory.GetMemberOrdinalFromReader(storeDataReader, member, edmType, renameList);
                ColumnMap columnMap         = columnMapArray[ordinalFromReader];
                keyColumns[index] = (SimpleColumnMap)columnMap;
                ++index;
            }
            SimpleEntityIdentity simpleEntityIdentity = new SimpleEntityIdentity(entitySet, keyColumns);

            return(new EntityColumnMap(TypeUsage.Create(edmType), edmType.Name, propertyColumnMaps, (EntityIdentity)simpleEntityIdentity));
        }
Example #2
0
 protected override EntityIdentity VisitEntityIdentity(
     SimpleEntityIdentity entityIdentity,
     VarMap replacementVarMap)
 {
     SimpleColumnMap[] keyColumns = this.VisitList <SimpleColumnMap>(entityIdentity.Keys, replacementVarMap);
     return((EntityIdentity) new SimpleEntityIdentity(entityIdentity.EntitySet, keyColumns));
 }
 protected override void VisitEntityIdentity(SimpleEntityIdentity entityIdentity, Dump dumper)
 {
     using (new Dump.AutoXml(dumper, "SimpleEntityIdentity"))
     {
         if (entityIdentity.Keys.Length <= 0)
         {
             return;
         }
         using (new Dump.AutoXml(dumper, "keys"))
             this.VisitList <SimpleColumnMap>(entityIdentity.Keys, dumper);
     }
 }
Example #4
0
 /// <summary>
 ///     SimpleEntityIdentity
 /// </summary>
 protected override void VisitEntityIdentity(SimpleEntityIdentity entityIdentity, Dump dumper)
 {
     using (new AutoXml(dumper, "SimpleEntityIdentity"))
     {
         if (entityIdentity.Keys.Length > 0)
         {
             using (new AutoXml(dumper, "keys"))
             {
                 VisitList(entityIdentity.Keys, dumper);
             }
         }
     }
 }
Example #5
0
        // <summary>
        // Build the entityColumnMap from a store datareader, a type and an entitySet and
        // a list of properties.
        // </summary>
        private static EntityColumnMap CreateEntityTypeElementColumnMap(
            DbDataReader storeDataReader, EdmType edmType, EntitySet entitySet,
            ColumnMap[] propertyColumnMaps, Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping> renameList)
        {
            var entityType = (EntityType)edmType;

            // The tricky part here is
            // that the KeyColumns list must point at the same ColumnMap(s) that
            // the properties list points to, so we build a quick array of
            // ColumnMap(s) that are indexed by their ordinal; then we can walk
            // the list of keyMembers, and find the ordinal in the reader, and
            // pick the same ColumnMap for it.

            // Build the ordinal -> ColumnMap index
            var ordinalToColumnMap = new ColumnMap[storeDataReader.FieldCount];

            foreach (var propertyColumnMap in propertyColumnMaps)
            {
                var ordinal = ((ScalarColumnMap)propertyColumnMap).ColumnPos;
                ordinalToColumnMap[ordinal] = propertyColumnMap;
            }

            // Now build the list of KeyColumns;
            IList <EdmMember> keyMembers = entityType.KeyMembers;
            var keyColumns = new SimpleColumnMap[keyMembers.Count];

            var keyMemberIndex = 0;

            foreach (var keyMember in keyMembers)
            {
                var keyOrdinal = GetMemberOrdinalFromReader(storeDataReader, keyMember, edmType, renameList);

                Debug.Assert(keyOrdinal >= 0, "keyMember for entity is not found by name in the data reader?");

                var keyColumnMap = ordinalToColumnMap[keyOrdinal];

                Debug.Assert(null != keyColumnMap, "keyMember for entity isn't in properties collection for the entity?");
                keyColumns[keyMemberIndex] = (SimpleColumnMap)keyColumnMap;
                keyMemberIndex++;
            }

            var entityIdentity = new SimpleEntityIdentity(entitySet, keyColumns);

            var result = new EntityColumnMap(TypeUsage.Create(edmType), edmType.Name, propertyColumnMaps, entityIdentity);

            return(result);
        }
Example #6
0
        /// <summary>
        ///     Copies the SimpleEntityIdentity
        /// </summary>
        /// <param name="entityIdentity"> </param>
        /// <param name="replacementVarMap"> </param>
        /// <returns> </returns>
        protected override EntityIdentity VisitEntityIdentity(SimpleEntityIdentity entityIdentity, VarMap replacementVarMap)
        {
            var newKeys = VisitList(entityIdentity.Keys, replacementVarMap);

            return(new SimpleEntityIdentity(entityIdentity.EntitySet, newKeys));
        }
        /// <summary>
        ///     Build the entityColumnMap from a store datareader, a type and an entitySet and
        ///     a list ofproperties.
        /// </summary>
        /// <param name="storeDataReader"> </param>
        /// <param name="edmType"> </param>
        /// <param name="entitySet"> </param>
        /// <param name="propertyColumnMaps"> </param>
        /// <returns> </returns>
        private static EntityColumnMap CreateEntityTypeElementColumnMap(
            DbDataReader storeDataReader, EdmType edmType, EntitySet entitySet,
            ColumnMap[] propertyColumnMaps, Dictionary<string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping> renameList)
        {
            var entityType = (EntityType)edmType;

            // The tricky part here is
            // that the KeyColumns list must point at the same ColumnMap(s) that 
            // the properties list points to, so we build a quick array of 
            // ColumnMap(s) that are indexed by their ordinal; then we can walk
            // the list of keyMembers, and find the ordinal in the reader, and 
            // pick the same ColumnMap for it.

            // Build the ordinal -> ColumnMap index
            var ordinalToColumnMap = new ColumnMap[storeDataReader.FieldCount];

            foreach (var propertyColumnMap in propertyColumnMaps)
            {
                var ordinal = ((ScalarColumnMap)propertyColumnMap).ColumnPos;
                ordinalToColumnMap[ordinal] = propertyColumnMap;
            }

            // Now build the list of KeyColumns;
            IList<EdmMember> keyMembers = entityType.KeyMembers;
            var keyColumns = new SimpleColumnMap[keyMembers.Count];

            var keyMemberIndex = 0;
            foreach (var keyMember in keyMembers)
            {
                var keyOrdinal = GetMemberOrdinalFromReader(storeDataReader, keyMember, edmType, renameList);

                Debug.Assert(keyOrdinal >= 0, "keyMember for entity is not found by name in the data reader?");

                var keyColumnMap = ordinalToColumnMap[keyOrdinal];

                Debug.Assert(null != keyColumnMap, "keyMember for entity isn't in properties collection for the entity?");
                keyColumns[keyMemberIndex] = (SimpleColumnMap)keyColumnMap;
                keyMemberIndex++;
            }

            var entityIdentity = new SimpleEntityIdentity(entitySet, keyColumns);

            var result = new EntityColumnMap(TypeUsage.Create(edmType), edmType.Name, propertyColumnMaps, entityIdentity);
            return result;
        }