예제 #1
0
        public virtual IEnumerable Read(Stream response)
        {
            String entitySetName = GetEntitSetName(response);

            response.Position = 0;
            Db.OeEntitySetMetaAdapter entitySetMetaAdatpter = EntitySetMetaAdapters.FindByEntitySetName(entitySetName);
            return(ReadImpl(response, entitySetMetaAdatpter));
        }
예제 #2
0
        public override Db.OeEntityAsyncEnumerator ExecuteProcedure(Object dataContext, String procedureName, IReadOnlyList <KeyValuePair <String, Object> > parameters, Type returnType)
        {
            var dbContext = (T)dataContext;
            var parameterNameGenerator = dbContext.GetService <IParameterNameGeneratorFactory>().Create();
            var sqlHelper = dbContext.GetService <ISqlGenerationHelper>();

            var sql = new StringBuilder(procedureName);

            for (int i = 0; i < parameters.Count; i++)
            {
                if (i == 0)
                {
                    sql.Append(' ');
                }

                String name = parameterNameGenerator.GenerateNext();
                sqlHelper.GenerateParameterName(sql, name);

                if (i < parameters.Count - 1)
                {
                    sql.Append(',');
                }
            }

            Object[] parameterValues = null;
            if (parameters.Count > 0)
            {
                parameterValues = new Object[parameters.Count];
                for (int i = 0; i < parameterValues.Length; i++)
                {
                    parameterValues[i] = parameters[i].Value;
                }
            }

            if (returnType == null)
            {
                int count = dbContext.Database.ExecuteSqlCommand(sql.ToString());
                return(new Db.OeEntityAsyncEnumeratorAdapter(new[] { (Object)count }, CancellationToken.None));
            }

            var fromSql = (IFromSql)EntitySetMetaAdapters.FindByClrType(returnType);

            if (fromSql == null)
            {
                throw new NotSupportedException("supported only Entity type");
            }

            var query = (IQueryable <Object>)fromSql.FromSql(dataContext, sql.ToString(), parameterValues);

            return(new Db.OeEntityAsyncEnumeratorAdapter(query, CancellationToken.None));
        }
예제 #3
0
        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);
        }
예제 #4
0
 public override OeEntitySetAdapter GetEntitySetAdapter(String entitySetName)
 {
     return(new OeEntitySetAdapter(EntitySetMetaAdapters.FindByEntitySetName(entitySetName), this));
 }
예제 #5
0
 public IEnumerable <T> Read <T>(Stream response)
 {
     Db.OeEntitySetMetaAdapter entitySetMetaAdatpter = EntitySetMetaAdapters.FindByClrType(typeof(T));
     return(ReadImpl(response, entitySetMetaAdatpter).Cast <T>());
 }