private OeEntityItem ReadEntityFromStream(OeMessageContext context, Stream content) { var parser = new ODataUriParser(context.Model, context.BaseUri, RequestUrl); IEdmEntitySet entitySet; IEdmEntityTypeReference entityTypeRef = GetEdmEntityTypeRef(parser.ParsePath(), out entitySet); var entityType = (IEdmEntityType)entityTypeRef.Definition; ODataResource entry = null; IODataRequestMessage requestMessage = new OeInMemoryMessage(content, ContentType); var settings = new ODataMessageReaderSettings { EnableMessageStreamDisposal = false }; using (var messageReader = new ODataMessageReader(requestMessage, settings, context.Model)) { ODataReader reader = messageReader.CreateODataResourceReader(entitySet, entityType); while (reader.Read()) { if (reader.State == ODataReaderState.ResourceEnd) { entry = (ODataResource)reader.Item; } } if (entry == null) { throw new InvalidOperationException("operation not contain entry"); } } Db.OeEntitySetMetaAdapter entitySetMetaAdapter = context.EntitySetMetaAdapters.FindByEntitySetName(entitySet.Name); return(new OeEntityItem(entitySet, entityType, entitySetMetaAdapter.EntityType, entry)); }
private OeEntityItem ReadEntityFromUrl(OeMessageContext context) { var parser = new ODataUriParser(context.Model, context.BaseUri, RequestUrl); ODataPath path = parser.ParsePath(); var keySegment = (KeySegment)path.LastSegment; var entityType = (IEdmEntityType)keySegment.EdmType; var entitySet = (IEdmEntitySet)keySegment.NavigationSource; var properties = new List <ODataProperty>(1); foreach (var key in keySegment.Keys) { properties.Add(new ODataProperty() { Name = key.Key, Value = key.Value }); } var entry = new ODataResource() { Properties = properties }; Db.OeEntitySetMetaAdapter entitySetMetaAdapter = context.EntitySetMetaAdapters.FindByEntitySetName(entitySet.Name); return(new OeEntityItem(entitySet, entityType, entitySetMetaAdapter.EntityType, entry)); }
public virtual IEnumerable Read(Stream response) { String entitySetName = GetEntitSetName(response); response.Position = 0; Db.OeEntitySetMetaAdapter entitySetMetaAdatpter = EntitySetMetaAdapters.FindByEntitySetName(entitySetName); return(ReadImpl(response, entitySetMetaAdatpter)); }
public override IEnumerable Read(Stream response) { String entitySetName = ResponseReader.GetEntitSetName(response); response.Position = 0; Db.OeEntitySetMetaAdapter entitySetMetaAdatpter = base.EntitySetMetaAdapters.FindByEntitySetName(entitySetName); return(base.ReadImpl(response, entitySetMetaAdatpter)); }
private OeEntryFactory CreateEntryFactory(OeExpressionBuilder expressionBuilder) { IEdmEntitySet entitySet = EntitySet; if (expressionBuilder.EntityType != EntitySetAdapter.EntityType) { String typeName = expressionBuilder.EntityType.FullName; Db.OeDataAdapter dataAdapter = EntitySetAdapter.DataAdapter; Db.OeEntitySetMetaAdapter entitySetMetaAdapter = dataAdapter.EntitySetMetaAdapters.FindByTypeName(typeName); if (entitySetMetaAdapter != null) { entitySet = EdmModel.FindDeclaredEntitySet(entitySetMetaAdapter.EntitySetName); } } return(expressionBuilder.CreateEntryFactory(entitySet)); }
private IEnumerable <T> ReadFeedImpl <T>(Stream response, Db.OeEntitySetMetaAdapter entitySetMetaAdatpter) { IODataRequestMessage responseMessage = new OeInMemoryMessage(response, null); var settings = new ODataMessageReaderSettings() { EnableMessageStreamDisposal = false }; var messageReader = new ODataMessageReader(responseMessage, settings, _edmModel); IEdmEntitySet entitySet = _edmModel.EntityContainer.FindEntitySet(entitySetMetaAdatpter.EntitySetName); ODataReader reader = messageReader.CreateODataResourceSetReader(entitySet, entitySet.EntityType()); var stack = new Stack <StackItem>(); while (reader.Read()) { switch (reader.State) { case ODataReaderState.ResourceStart: stack.Push(new StackItem((ODataResource)reader.Item)); break; case ODataReaderState.ResourceEnd: StackItem stackItem = stack.Pop(); Object entity = CreateEntity(stackItem); if (stack.Count == 0) { yield return((T)entity); } else { stack.Peek().AddEntry(entity); } break; case ODataReaderState.NestedResourceInfoStart: stack.Push(new StackItem((ODataNestedResourceInfo)reader.Item)); break; case ODataReaderState.NestedResourceInfoEnd: StackItem item = stack.Pop(); stack.Peek().AddLink((ODataNestedResourceInfo)item.Item, item.Value); break; } } }
public IEnumerable ReadFeed(Stream response) { String entitySetName = GetEntitSetName(response); if (entitySetName == null) { return(null); } response.Position = 0; Db.OeEntitySetMetaAdapter entitySetMetaAdatpter = _entitySetMetaAdapters.FindByEntitySetName(entitySetName); Delegate func = (Func <Stream, Db.OeEntitySetMetaAdapter, IEnumerable <Object> >)ReadFeedImpl <Object>; MethodInfo genericDef = func.GetMethodInfo().GetGenericMethodDefinition(); MethodInfo genericFunc = genericDef.MakeGenericMethod(entitySetMetaAdatpter.EntityType); return((IEnumerable)genericFunc.Invoke(this, new Object[] { response, entitySetMetaAdatpter })); }
private OeEntryFactory CreateEntryFactory(OeExpressionBuilder expressionBuilder) { IEdmEntitySetBase entitySet = EntitySet; if (expressionBuilder.EntityType != EntitySetAdapter.EntityType) { String typeName = expressionBuilder.EntityType.FullName; Db.OeDataAdapter dataAdapter = EntitySetAdapter.DataAdapter; Db.OeEntitySetMetaAdapter entitySetMetaAdapter = dataAdapter.EntitySetMetaAdapters.FindByTypeName(typeName); if (entitySetMetaAdapter != null) { entitySet = EdmModel.FindDeclaredEntitySet(entitySetMetaAdapter.EntitySetName); } } OeEntryFactory entryFactory = expressionBuilder.CreateEntryFactory(entitySet); entryFactory.CountOption = ODataUri.QueryCount; return(entryFactory); }
protected Object CreateEntity(ODataResource resource, IReadOnlyList <NavigationPorperty> navigationProperties) { Db.OeEntitySetMetaAdapter entitySetMetaAdapter = EntitySetMetaAdapters.FindByTypeName(resource.TypeName); Object entity = OeEntityItem.CreateEntity(entitySetMetaAdapter.EntityType, resource); Dictionary <PropertyInfo, ODataResourceSetBase> propertyInfos = null; foreach (NavigationPorperty navigationProperty in navigationProperties) { PropertyInfo clrProperty = entitySetMetaAdapter.EntityType.GetProperty(navigationProperty.Name); Object value = navigationProperty.Value; if (navigationProperty.ResourceSet == null || (navigationProperty.ResourceSet.Count == null && navigationProperty.ResourceSet.NextPageLink == null)) { clrProperty.SetValue(entity, value); continue; } if (value == null && navigationProperty.ResourceSet.NextPageLink != null) { value = CreateCollection(clrProperty.PropertyType); } clrProperty.SetValue(entity, value); if (value is IEnumerable collection) { NavigationProperties.Add(collection, navigationProperty.ResourceSet); if (propertyInfos == null) { propertyInfos = new Dictionary <PropertyInfo, ODataResourceSetBase>(navigationProperties.Count); NavigationPropertyEntities.Add(entity, propertyInfos); } propertyInfos.Add(clrProperty, navigationProperty.ResourceSet); } } return(entity); }
public IEnumerable <T> ReadFeed <T>(Stream response) { Db.OeEntitySetMetaAdapter entitySetMetaAdatpter = _entitySetMetaAdapters.FindByClrType(typeof(T)); return(ReadFeedImpl <T>(response, entitySetMetaAdatpter)); }
protected IEnumerable ReadImpl(Stream response, Db.OeEntitySetMetaAdapter entitySetMetaAdatpter) { ResourceSet = null; NavigationProperties.Clear(); NavigationPropertyEntities.Clear(); IODataResponseMessage responseMessage = new OeInMemoryMessage(response, null); var settings = new ODataMessageReaderSettings() { EnableMessageStreamDisposal = false, Validations = ValidationKinds.None }; var messageReader = new ODataMessageReader(responseMessage, settings, EdmModel); IEdmEntitySet entitySet = EdmModel.EntityContainer.FindEntitySet(entitySetMetaAdatpter.EntitySetName); ODataReader reader = messageReader.CreateODataResourceSetReader(entitySet, entitySet.EntityType()); var stack = new Stack <StackItem>(); while (reader.Read()) { switch (reader.State) { case ODataReaderState.ResourceSetStart: if (stack.Count == 0) { ResourceSet = (ODataResourceSetBase)reader.Item; } else { stack.Peek().ResourceSet = (ODataResourceSetBase)reader.Item; } break; case ODataReaderState.ResourceStart: stack.Push(new StackItem((ODataResource)reader.Item)); break; case ODataReaderState.ResourceEnd: StackItem stackItem = stack.Pop(); if (reader.Item != null) { if (stack.Count == 0) { yield return(CreateRootEntity((ODataResource)stackItem.Item, stackItem.NavigationProperties, entitySetMetaAdatpter.EntityType)); } else { stack.Peek().AddEntry(CreateEntity((ODataResource)stackItem.Item, stackItem.NavigationProperties)); } } break; case ODataReaderState.NestedResourceInfoStart: stack.Push(new StackItem((ODataNestedResourceInfo)reader.Item)); break; case ODataReaderState.NestedResourceInfoEnd: StackItem item = stack.Pop(); stack.Peek().AddLink((ODataNestedResourceInfo)item.Item, item.Value, item.ResourceSet); break; } } }