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)); }
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); } }
/// <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); } } } }
// <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); }
/// <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; }