/// <summary> /// ComplexTypeColumnMap /// </summary> /// <param name="columnMap"> </param> /// <param name="replacementVarMap"> </param> /// <returns> </returns> internal override ColumnMap Visit(ComplexTypeColumnMap columnMap, VarMap replacementVarMap) { var newNullability = columnMap.NullSentinel; if (null != newNullability) { newNullability = (SimpleColumnMap)newNullability.Accept(this, replacementVarMap); } var fieldList = VisitList(columnMap.Properties, replacementVarMap); return(new ComplexTypeColumnMap(columnMap.Type, columnMap.Name, fieldList, newNullability)); }
internal override void Visit(ComplexTypeColumnMap columnMap, Dump dumper) { using (new Dump.AutoXml(dumper, "ComplexType", Dump.ColumnMapDumper.GetAttributes((ColumnMap)columnMap))) { if (columnMap.NullSentinel != null) { using (new Dump.AutoXml(dumper, "nullSentinel")) columnMap.NullSentinel.Accept <Dump>((ColumnMapVisitor <Dump>) this, dumper); } this.VisitList <ColumnMap>(columnMap.Properties, dumper); } }
internal override ColumnMap Visit( ComplexTypeColumnMap columnMap, VarMap replacementVarMap) { SimpleColumnMap nullSentinel = columnMap.NullSentinel; if (nullSentinel != null) { nullSentinel = (SimpleColumnMap)nullSentinel.Accept <ColumnMap, VarMap>((ColumnMapVisitorWithResults <ColumnMap, VarMap>) this, replacementVarMap); } ColumnMap[] properties = this.VisitList <ColumnMap>(columnMap.Properties, replacementVarMap); return((ColumnMap) new ComplexTypeColumnMap(columnMap.Type, columnMap.Name, properties, nullSentinel)); }
/// <summary> /// ComplexTypeColumnMap /// </summary> internal override void Visit(ComplexTypeColumnMap columnMap, Dump dumper) { using (new AutoXml(dumper, "ComplexType", GetAttributes(columnMap))) { if (columnMap.NullSentinel != null) { using (new AutoXml(dumper, "nullSentinel")) { columnMap.NullSentinel.Accept(this, dumper); } } VisitList(columnMap.Properties, dumper); } }
// <summary> // Build the collectionColumnMap from a store datareader, a type and an entitySet. // </summary> internal virtual CollectionColumnMap CreateColumnMapFromReaderAndType( DbDataReader storeDataReader, EdmType edmType, EntitySet entitySet, Dictionary <string, FunctionImportReturnTypeStructuralTypeColumnRenameMapping> renameList) { Debug.Assert( Helper.IsEntityType(edmType) || null == entitySet, "The specified non-null EntitySet is incompatible with the EDM type specified."); // Next, build the ColumnMap directly from the edmType and entitySet provided. var propertyColumnMaps = GetColumnMapsForType(storeDataReader, edmType, renameList); ColumnMap elementColumnMap = null; // NOTE: We don't have a null sentinel here, because the stored proc won't // return one anyway; we'll just presume the data's always there. if (Helper.IsRowType(edmType)) { elementColumnMap = new RecordColumnMap(TypeUsage.Create(edmType), edmType.Name, propertyColumnMaps, null); } else if (Helper.IsComplexType(edmType)) { elementColumnMap = new ComplexTypeColumnMap(TypeUsage.Create(edmType), edmType.Name, propertyColumnMaps, null); } else if (Helper.IsScalarType(edmType)) { if (storeDataReader.FieldCount != 1) { throw new EntityCommandExecutionException(Strings.ADP_InvalidDataReaderFieldCountForScalarType); } elementColumnMap = new ScalarColumnMap(TypeUsage.Create(edmType), edmType.Name, 0, 0); } else if (Helper.IsEntityType(edmType)) { elementColumnMap = CreateEntityTypeElementColumnMap( storeDataReader, edmType, entitySet, propertyColumnMaps, null /*renameList*/); } else { Debug.Assert(false, "unexpected edmType?"); } CollectionColumnMap collection = new SimpleCollectionColumnMap( edmType.GetCollectionType().TypeUsage, edmType.Name, elementColumnMap, null, null); return(collection); }