/// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Criador dos objetos.</param>
 /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param>
 public QueryableSourceProvider(Query.Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator, Func <Query.Queryable, IEnumerable <T> > executeSelect)
 {
     _queryable     = queryable;
     _bindStrategy  = bindStrategy;
     _objectCreator = objectCreator;
     _executeSelect = executeSelect;
 }
Example #2
0
 /// <summary>
 /// Libera a instancia.
 /// </summary>
 /// <param name="disposing"></param>
 protected virtual void Dispose(bool disposing)
 {
     while (_schemas.Count > 0)
     {
         var schema = _schemas[0];
         _schemas.RemoveAt(0);
         schema.Dispose();
     }
     _creator = null;
     Type     = null;
 }
Example #3
0
        /// <summary>
        /// Construtor padrão.
        /// </summary>
        /// <param name="result"></param>
        public QueryResult(IQueryResult result)
        {
            if (result == null)
            {
                throw new ArgumentNullException("result");
            }
            _result = result;
            var ts = TypeBindStrategyCache.GetItem(typeof(TModel), t => new QueryResultObjectCreator(t));

            _objectCreator = ts;
            _bindStrategy  = ts;
        }
Example #4
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="type">Tipo que será usado pela instancia.</param>
 /// <param name="creator">Instancia responsável por criar um instancia do tipo informado.</param>
 public TypeBindStrategy(Type type, IQueryResultObjectCreator creator = null)
 {
     type.Require("type").NotNull();
     if (creator == null)
     {
         _creator = new QueryResultObjectCreator(type);
     }
     else
     {
         _creator = creator;
     }
     Type = type;
 }
Example #5
0
 /// <summary>
 /// Construtor completo.
 /// </summary>
 /// <param name="result">Resultado base da consulta.</param>
 /// <param name="bindStrategy">Estratégia de vinculação que será utilizada.</param>
 /// <param name="objectCreator">Instancia responsável pela criação do tipo do resultado.</param>
 public QueryResult(IQueryResult result, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator = null)
 {
     if (result == null)
     {
         throw new ArgumentNullException("result");
     }
     else if (bindStrategy == null)
     {
         throw new ArgumentNullException("bindStrategy");
     }
     _result       = result;
     _bindStrategy = bindStrategy;
     if (objectCreator == null)
     {
         _objectCreator = new QueryResultObjectCreator(typeof(TModel));
     }
     else
     {
         _objectCreator = objectCreator;
     }
 }
Example #6
0
 /// <summary>
 /// Converte para o resulta do tipo informado.
 /// </summary>
 /// <typeparam name="Model">Tipo deo modelo que será recuperado.</typeparam>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator"></param>
 /// <returns></returns>
 public QueryResult <Model> To <Model>(IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator = null)
 {
     return(new QueryResult <Model>(this, bindStrategy, objectCreator));
 }
Example #7
0
        /// <summary>
        /// Cria uma instancia do provedor para a consulta informada.
        /// </summary>
        /// <param name="queryable"></param>
        /// <param name="bindStrategy">Estratégia de vinculação.</param>
        /// <param name="objectCreator">Criador de objetos.</param>
        /// <param name="executeSelect">Método acionado quando for executada uma seleção de valores da consulta.</param>
        /// <returns></returns>
        public static IQueryProvider Create <T>(Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator, Func <Query.Queryable, IEnumerable <T> > executeSelect)
        {
            queryable.Require("queryable").NotNull();
            var sourceProvider = new QueryableSourceProvider <T>(queryable, bindStrategy, objectCreator, executeSelect);
            var sourceContext  = new LinqSourceContext(queryable.SourceContext, sourceProvider);

            return(new QueryProvider(sourceContext));
        }
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="result">Instancia do resultado da consulta.</param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Instancia do criador dos objetos.</param>
 public BindableQueryResult(IQueryResult result, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator)
 {
     _result        = result;
     _bindStrategy  = bindStrategy;
     _objectCreator = objectCreator;
 }
Example #9
0
        /// <summary>
        /// Executa a vinculação dos dados contidos na enumeração de registro informados
        /// e retorna uma enumeração das instancias preechidas.
        /// </summary>
        /// <param name="records">Registros que serão processados.</param>
        /// <param name="mode">Modo da estratégia.</param>
        /// <param name="creator">Instancia responsável pela criação dos objetos.</param>
        /// <returns></returns>
        public IEnumerable <T> Bind <T>(IEnumerable <IRecord> records, BindStrategyMode mode, IQueryResultObjectCreator creator)
        {
            IQueryResultBindStrategySession session = null;

            foreach (var i in records)
            {
                if (session == null)
                {
                    session = CreateSession(i.Descriptor);
                }
                object result = creator.Create();
                session.Bind(i, mode, ref result);
                yield return((T)result);
            }
        }
 /// <summary>
 /// Executa a vinculação dos dados contidos na enumeração de registro informados
 /// e retorna uma enumeração das instancias preechidas.
 /// </summary>
 /// <typeparam name="T">Tipo que será usado na operação.</typeparam>
 /// <param name="records">Registros que serão processados.</param>
 /// <param name="mode">Modo da estratégia.</param>
 /// <param name="creator">Instancia responsável pela criação dos objetos.</param>
 /// <returns></returns>
 IEnumerable <T> IQueryResultBindStrategy.Bind <T>(IEnumerable <IRecord> records, BindStrategyMode mode, IQueryResultObjectCreator creator)
 {
     return(new Enumerable <T>(_func(records, mode)));
 }
 /// <summary>
 /// Executa a vinculação dos dados contidos na enumeração de registro informados
 /// e retorna uma enumeração das instancias preechidas.
 /// </summary>
 /// <param name="records">Registros que serão processados.</param>
 /// <param name="mode">Modo da estratégia.</param>
 /// <param name="creator">Instancia responsável pela criação dos objetos.</param>
 /// <returns></returns>
 System.Collections.IEnumerable IQueryResultBindStrategy.Bind(IEnumerable <IRecord> records, BindStrategyMode mode, IQueryResultObjectCreator creator)
 {
     return(_func(records, mode));
 }
Example #12
0
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Criador de objetos.</param>
 /// <param name="executeSelect">Referencia do método que será usado para executar a seleção dos dados.</param>
 public Queryable(Query.Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator, Func <Query.Queryable, IEnumerable <TEntity> > executeSelect)
 {
     queryable.Require("queryable").NotNull();
     _sourceContext = queryable.SourceContext as ILinqSourceContext;
     _queryable     = queryable;
     if (_sourceContext == null)
     {
         _sourceContext = new LinqSourceContext(queryable.SourceContext, new QueryableSourceProvider <TEntity>(queryable, bindStrategy, objectCreator, executeSelect));
     }
     _queryProvider = new QueryProvider(_sourceContext);
 }
Example #13
0
 /// <summary>
 /// Cria a instancia a partir de uma consulta.
 /// </summary>
 /// <param name="queryable"></param>
 /// <param name="bindStrategy">Estratégia de vinculação.</param>
 /// <param name="objectCreator">Criador de objetos.</param>
 public Queryable(Query.Queryable queryable, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator = null) : this(queryable, bindStrategy, objectCreator, null)
 {
 }
Example #14
0
 /// <summary>
 /// Adiciona uma query
 /// </summary>
 /// <param name="query"><see cref="Queryable"/> a ser adicionado</param>
 /// <param name="callback">Função de callback da consulta</param>
 /// <param name="bindStrategy">Estratégia de binding</param>
 /// <param name="objectCreator">Criador de objetos</param>
 public MultiQueryable Add(Queryable query, BindableQueryCallBack callback, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator)
 {
     bindStrategy.Require("bindStrategy").NotNull();
     objectCreator.Require("objectCreator").NotNull();
     _queries.Add(query);
     if (callback != null)
     {
         var wrapper = new BindableQueryCallBackWrapper();
         wrapper.QueryCallBack = callback;
         wrapper.BindStrategy  = bindStrategy;
         wrapper.ObjectCreator = objectCreator;
         _callbacks.Add(_queries.Count - 1, wrapper);
     }
     return(this);
 }
Example #15
0
 public MultiQueryable Add <TModel>(Queryable query, QueryCallBack <TModel> callback, QueryFailedCallBack failedCallBack, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator)
 {
     _queries.Add(query);
     if (bindStrategy == null && objectCreator == null)
     {
         var ts = TypeBindStrategyCache.GetItem(typeof(TModel), t => new QueryResultObjectCreator(t));
         objectCreator = ts;
         bindStrategy  = ts;
     }
     if (bindStrategy == null)
     {
         bindStrategy = new TypeBindStrategy(typeof(TModel), objectCreator);
     }
     if (callback != null)
     {
         QueryCallBackWrapper <TModel> wrapper = new QueryCallBackWrapper <TModel>();
         wrapper.QueryCallBack       = callback;
         wrapper.QueryFailedCallBack = failedCallBack;
         wrapper.BindStrategy        = bindStrategy;
         wrapper.ObjectCreator       = objectCreator;
         _callbacks.Add(_queries.Count - 1, wrapper);
     }
     return(this);
 }
Example #16
0
 /// <summary>
 /// Adiciona uma query
 /// </summary>
 /// <typeparam name="TModel">Tipo de retorno</typeparam>
 /// <param name="query"><see cref="Queryable"/> a ser adicionado</param>
 /// <param name="callback">Função de callback da consulta</param>
 /// <param name="bindStrategy">Estratégia de binding</param>
 /// <param name="objectCreator">Criador de objetos</param>
 public MultiQueryable Add <TModel>(Queryable query, QueryCallBack <TModel> callback, IQueryResultBindStrategy bindStrategy, IQueryResultObjectCreator objectCreator)
 {
     return(Add <TModel>(query, callback, null, bindStrategy, objectCreator));
 }