public EntityDataReader(IEnumerable <T> col, EntityDataReaderOptions options, ObjectContext objectContext) { this.enumerator = col.GetEnumerator(); this.options = options; if (options.RecreateForeignKeysForEntityFrameworkEntities && objectContext == null) { throw new ArgumentException("If RecreateForeignKeysForEntityFrameworkEntities=true then objectContext is required"); } //done without a lock, so we risk running twice if (scalarAttributes == null) { scalarAttributes = DiscoverScalarAttributes(typeof(T)); } if (options.FlattenRelatedObjects && scalarAttributesPlusRelatedObjectScalarAttributes == null) { var atts = DiscoverRelatedObjectScalarAttributes(typeof(T)); scalarAttributesPlusRelatedObjectScalarAttributes = atts.Concat(scalarAttributes).ToList(); } if (options.RecreateForeignKeysForEntityFrameworkEntities && scalarAttributesPlusRelatedObjectKeyAttributes == null) { var atts = DiscoverRelatedObjectKeyAttributes(typeof(T), objectContext); scalarAttributesPlusRelatedObjectKeyAttributes = atts.Concat(scalarAttributes).ToList(); } if (options.FlattenRelatedObjects) { this.attributes = scalarAttributesPlusRelatedObjectScalarAttributes; } else if (objectContext != null) { this.attributes = scalarAttributesPlusRelatedObjectKeyAttributes; } else { this.attributes = scalarAttributes; } }
/// <summary> /// Wraps the IEnumerable in a DbDataReader, having one column for each "scalar" property of the type T. /// The collection will be enumerated as the client calls IDataReader.Read(). /// </summary> /// <typeparam name="T"></typeparam> /// <param name="collection"></param> /// <returns></returns> public static IDataReader AsDataReader <T>(this IEnumerable <T> collection, bool exposeNullableColumns, bool flattenRelatedObjects) { var options = new EntityDataReaderOptions(exposeNullableColumns, flattenRelatedObjects, true, false); return(new EntityDataReader <T>(collection, options, null)); }
public EntityDataReader(IEnumerable <T> col, EntityDataReaderOptions options) : this(col, options, null) { }