/// <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)); }
/// <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); }
/// <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> /// 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)); }
/// <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)); }