Пример #1
0
        private void ExecuteBulkCopy(int timeout)
        {
            var source = _dataObjectAccessor.GetSource();

            var target = _targetDataConnection.GetTable <TDataObject>();
            var temp   = _targetDataConnection.CreateTable <TDataObject>($"#{Guid.NewGuid():N}");

            try
            {
                var options = new BulkCopyOptions {
                    BulkCopyTimeout = timeout
                };
                temp.BulkCopy(options, source);
                temp.Where(x => !target.Contains(x)).Insert(target, x => x);
            }
            catch (Exception ex)
            {
                string sqlText;
                try
                {
                    var linq2DBQuery = source as IExpressionQuery <TDataObject>;
                    sqlText = linq2DBQuery?.SqlText;
                }
                catch (Exception innerException)
                {
                    sqlText = $"can not build sql query: {innerException.Message}";
                }

                throw new DataException($"Error occured while bulk replacing data for dataobject of type {typeof(TDataObject).Name} using {_dataObjectAccessor.GetType().Name}{Environment.NewLine}{sqlText}{Environment.NewLine}", ex);
            }
        }
 public ValueObjectChangesProvider(IQuery query,
                                   IStorageBasedDataObjectAccessor <TDataObject> storageBasedDataObjectAccessor,
                                   IEqualityComparerFactory equalityComparerFactory)
 {
     _storageBasedDataObjectAccessor = storageBasedDataObjectAccessor;
     _dataChangesDetector            = new DataChangesDetector <TDataObject>(
         specification => storageBasedDataObjectAccessor.GetSource().WhereMatched(specification),
         specification => query.For <TDataObject>().WhereMatched(specification),
         equalityComparerFactory.CreateCompleteComparer <TDataObject>());
 }
        public MergeResult <TDataObject> GetChanges(IReadOnlyCollection <ICommand> commands)
        {
            var specification = _storageBasedDataObjectAccessor.GetFindSpecification(commands);
            var source        = _storageBasedDataObjectAccessor.GetSource().WhereMatched(specification);
            var target        = _query.For <TDataObject>().WhereMatched(specification);

            var result = MergeTool.Merge(source, target, _identityComparer);

            return(result);
        }
Пример #4
0
            public override void Process(bool isEmpty)
            {
                TDataType[] data;
                if (isEmpty)
                {
                    data = Array.Empty <TDataType>();
                }
                else
                {
                    data = _accessor.GetSource().Execute();
                }

                _target.AddRange(data);
            }
Пример #5
0
 public IQueryable <T> GetSource()
 => typeof(ITenantEntity).IsAssignableFrom(typeof(T))
         ? _implementation.GetSource().Select(_tenant.ApplyToEntity <T>())
         : _implementation.GetSource();
 public IQueryable <T> GetSource()
 => _implementation.GetSource().Select(_tenant.ApplyToEntity <T>());
Пример #7
0
            public override void Process(bool isEmpty)
            {
                var data = isEmpty ? Array.Empty <TDataType>() : _accessor.GetSource().Execute();

                _target.AddRange(data);
            }
Пример #8
0
 public ReplicatorImpl(IStorageBasedDataObjectAccessor <TDataType> accessor, IStore target)
 {
     _info     = GetAccessorInfo(accessor.GetType(), new Lazy <Expression>(() => accessor.GetSource().Expression));
     _accessor = accessor;
     _target   = target;
 }
 public BulkInsertDataObjectsActor(IStorageBasedDataObjectAccessor <TDataObject> dataObjectAccessor, DataConnection targetDataConnection)
 {
     _dataObjectAccessorName = dataObjectAccessor.GetType().Name;
     _dataObjectsSource      = dataObjectAccessor.GetSource();
     _targetDataConnection   = targetDataConnection;
 }