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);
            }
        }
Ejemplo n.º 2
0
 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));
        }
Ejemplo n.º 5
0
 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);
 }
Ejemplo n.º 6
0
        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);
 }
Ejemplo n.º 8
0
        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));
        }