public MergeResult <TCompared> DetectChanges <TCompared>(MapSpecification <IEnumerable <TOutput>, IEnumerable <TCompared> > mapSpec, FindSpecification <TFilter> specification, IEqualityComparer <TCompared> comparer) { using (var scope = new TransactionScope(TransactionScopeOption.Suppress)) { var sourceObjects = _sourceProvider.Invoke(specification).Map(_query); var targetObjects = _targetProvider.Invoke(specification).Map(_query); var result = MergeTool.Merge( mapSpec.Map(sourceObjects).ToArray(), mapSpec.Map(targetObjects).ToArray(), comparer); scope.Complete(); return(result); } }
public void Replicate() { try { var sourceQueryable = _mapSpecification.Map(_source); var options = new BulkCopyOptions { BulkCopyTimeout = 1800 }; _target.GetTable <T>().Delete(); _target.BulkCopy(options, sourceQueryable); } catch (Exception ex) { var linq2DBSource = _source as LinqToDbQuery; throw new Exception($"Can not process entity type {typeof(T).Name}\n{linq2DBSource?.LastQuery}", ex); } }
public void Replicate() { try { var sourceQueryable = _mapSpecification.Map(_source); var options = new BulkCopyOptions { BulkCopyTimeout = 1800 }; var temptable = _target.CreateTable <T>($"#{Guid.NewGuid():N}"); temptable.BulkCopy(options, sourceQueryable); var primaryKeys = _target.MappingSchema.GetEntityDescriptor(typeof(T)).Columns.Where(x => x.IsPrimaryKey); var keyExpression = CreateMappingExpressionForProperties(primaryKeys.Select(x => x.MemberInfo)); var datatable = _target.GetTable <T>(); temptable.Join(datatable, keyExpression, keyExpression, (x, y) => x).Update(datatable, x => x); } catch (Exception ex) { var linq2DBSource = _source as LinqToDbQuery; throw new Exception($"Can not process entity type {typeof(T).Name}\n{linq2DBSource?.LastQuery}", ex); } }
protected override FactMetadata <T> Create() { MapToObjectsSpecProvider <T, T> mapSpecificationProviderForSource = specification => new MapSpecification <IQuery, IEnumerable <T> >(q => _sourceMappingSpecification.Map(q).Where(specification)); var targetMappingSpecification = new MapSpecification <IQuery, IQueryable <T> >(q => q.For <T>()); MapToObjectsSpecProvider <T, T> mapSpecificationProviderForTarget = specification => new MapSpecification <IQuery, IEnumerable <T> >(q => targetMappingSpecification.Map(q).Where(specification)); return(new FactMetadata <T>(mapSpecificationProviderForSource, mapSpecificationProviderForTarget, Specs.Find.ByIds <T>, Features)); }
public StatisticsRecalculationMetadataBuilder <TStatisticsObject, TEntityKey> HasTarget(MapSpecification <IQuery, IQueryable <TStatisticsObject> > targetMappingSpecification) { _mapSpecificationProviderForTarget = specification => new MapSpecification <IQuery, IEnumerable <TStatisticsObject> >(q => targetMappingSpecification.Map(q).Where(specification));; return(this); }
public AggregateMetadataBuilder <T> HasValueObject <TValueObject>( MapSpecification <IQuery, IQueryable <TValueObject> > sourceMappingSpecification, Func <IReadOnlyCollection <long>, FindSpecification <TValueObject> > findSpecificationProvider) where TValueObject : class { MapToObjectsSpecProvider <TValueObject, TValueObject> mapSpecificationProviderForSource = specification => new MapSpecification <IQuery, IEnumerable <TValueObject> >(q => sourceMappingSpecification.Map(q).Where(specification)); var targetMappingSpecification = new MapSpecification <IQuery, IQueryable <TValueObject> >(q => q.For <TValueObject>()); MapToObjectsSpecProvider <TValueObject, TValueObject> mapSpecificationProviderForTarget = specification => new MapSpecification <IQuery, IEnumerable <TValueObject> >(q => targetMappingSpecification.Map(q).Where(specification)); Childs(new ValueObjectMetadataElement <TValueObject>(mapSpecificationProviderForSource, mapSpecificationProviderForTarget, findSpecificationProvider)); return(this); }
public StatisticsRecalculationMetadataBuilder <T> HasSource(MapSpecification <IQuery, IQueryable <T> > sourceMappingSpecification) { _mapSpecificationProviderForSource = specification => new MapSpecification <IQuery, IEnumerable <T> >(q => sourceMappingSpecification.Map(q).Where(specification)); return(this); }
protected override AggregateMetadata <T, TKey> Create() { MapToObjectsSpecProvider <T, T> mapSpecificationProviderForSource = specification => new MapSpecification <IQuery, IEnumerable <T> >(q => _mapToSourceSpec.Map(q).Where(specification)); var targetMappingSpecification = new MapSpecification <IQuery, IQueryable <T> >(q => q.For <T>()); MapToObjectsSpecProvider <T, T> mapSpecificationProviderForTarget = specification => new MapSpecification <IQuery, IEnumerable <T> >(q => targetMappingSpecification.Map(q).Where(specification)); return(new AggregateMetadata <T, TKey>(mapSpecificationProviderForSource, mapSpecificationProviderForTarget, Features)); }