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); }
public override void Process(bool isEmpty) { TDataType[] data; if (isEmpty) { data = Array.Empty <TDataType>(); } else { data = _accessor.GetSource().Execute(); } _target.AddRange(data); }
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>());
public override void Process(bool isEmpty) { var data = isEmpty ? Array.Empty <TDataType>() : _accessor.GetSource().Execute(); _target.AddRange(data); }
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; }