Esempio n. 1
0
 /// <summary>
 /// Executa a vinculação dos dados contidos no registro para o objeto informado.
 /// </summary>
 /// <param name="record">Registro da consulta.</param>
 /// <param name="mode">Modo da estratégia.</param>
 /// <param name="instance">Instancia onde será vinculado os dados.</param>
 /// <returns>Relação das propriedade na qual o bind foi aplicado.</returns>
 public IEnumerable <string> Bind(IRecord record, BindStrategyMode mode, ref object instance)
 {
     record.Require("record").NotNull();
     if (instance == null && _creator != null)
     {
         instance = _creator.Create();
     }
     return(CreateSession(record.Descriptor).Bind(record, mode, ref instance));
 }
Esempio n. 2
0
        /// <summary>
        /// Executa a vinculação dos dados contidos no registro para o objeto informado.
        /// </summary>
        /// <typeparam name="T">Tipo que será usado na operação.</typeparam>
        /// <param name="record">Registro da consulta.</param>
        /// <param name="mode">Modo da estratégia.</param>
        /// <param name="instance">Instancia onde será vinculado os dados.</param>
        /// <returns>Relação das propriedade na qual o bind foi aplicado.</returns>
        public IEnumerable <string> Bind <T>(IRecord record, BindStrategyMode mode, ref T instance)
        {
            record.Require("record").NotNull();
            object instance2 = instance;

            if (instance2 == null && _creator != null)
            {
                instance2 = _creator.Create();
            }
            var result = CreateSession(record.Descriptor).Bind(record, mode, ref instance2);

            instance = (T)instance2;
            return(result);
        }
Esempio n. 3
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);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Preenche os dados do objeto com o conteudo do registro informado.
        /// </summary>
        /// <param name="record"></param>
        /// <param name="mode"></param>
        /// <param name="instance"></param>
        /// <returns>Nomes das propriedade alteradas.</returns>
        public IEnumerable <string> Bind(IRecord record, BindStrategyMode mode, ref object instance)
        {
            var result = new List <string>();

            if (instance is Colosoft.Data.IStorageControl)
            {
                ((Colosoft.Data.IStorageControl)instance).ExistsInStorage = true;
            }
            foreach (var property in _schema)
            {
                var value = property.GetRecordValue(record);
                if (mode == BindStrategyMode.Differences)
                {
                    object oldValue = null;
                    try
                    {
                        oldValue = property.GetValue(instance);
                    }
                    catch (Exception ex)
                    {
                        throw new TypeBindStrategyException(ResourceMessageFormatter.Create(() => Properties.Resources.TypeBindStrategy_GetPropertyValueError, property.FieldName, instance.GetType().FullName).Format(), ex);
                    }
                    if ((typeof(IComparable).IsAssignableFrom(property.PropertyType) && System.Collections.Comparer.Default.Compare(value, oldValue) == 0) || object.ReferenceEquals(value, oldValue))
                    {
                        continue;
                    }
                }
                try
                {
                    property.SetValue(instance, value);
                }
                catch (ArgumentException ex)
                {
                    throw new TypeBindStrategyException(ResourceMessageFormatter.Create(() => Properties.Resources.TypeBindStrategy_ConvertValueError, property.FieldName, instance.GetType().FullName, (value != null ? value.GetType().FullName : "System.Object"), property.PropertyType.FullName).Format(), ex);
                }
                result.Add(property.Name);
            }
            if (instance is IExtensiveData)
            {
                ((IExtensiveData)instance).Process(record);
            }
            return(result);
        }
        /// <summary>
        /// Executa a vinculação dos dados contidos no registro para o objeto informado.
        /// </summary>
        /// <typeparam name="T">Tipo que será usado na operação.</typeparam>
        /// <param name="record">Registro da consulta.</param>
        /// <param name="mode">Modo da estratégia.</param>
        /// <param name="instance">Instancia onde será vinculado os dados.</param>
        /// <returns>Relação das propriedade na qual o bind foi aplicado.</returns>
        IEnumerable <string> IQueryResultBindStrategy.Bind <T>(IRecord record, BindStrategyMode mode, ref T instance)
        {
            var enumerator = _func(new[] {
                record
            }, mode).GetEnumerator();

            try
            {
                if (enumerator.MoveNext())
                {
                    instance = (T)(object)enumerator.Current;
                }
            }
            finally
            {
                if (enumerator is IDisposable)
                {
                    ((IDisposable)enumerator).Dispose();
                }
            }
            return(new string[0]);
        }
 /// <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));
 }
Esempio n. 8
0
 /// <summary>
 /// Preenche os dados do objeto com o conteudo do registro informado.
 /// </summary>
 /// <param name="record"></param>
 /// <param name="mode"></param>
 /// <param name="instance"></param>
 /// <returns>Nomes das propriedade alteradas.</returns>
 public IEnumerable <string> Bind(IRecord record, BindStrategyMode mode, ref object instance)
 {
     return(_bindStrategy.Bind(record, mode, ref instance));
 }