public GetMonthlyExpenseQueryTests() { context = InMemoryEfCoreContextFactory.Create(); contextAdapterMock = Substitute.For <IContextAdapter>(); contextAdapterMock.Context.Returns(context); }
public GetIncludedAccountBalanceSummaryTests() { context = InMemoryEfCoreContextFactory.Create(); contextAdapter = Substitute.For <IContextAdapter>(); contextAdapter.Context.Returns(context); }
public GetTotalEndOfMonthBalanceQueryTests() { context = InMemoryEfCoreContextFactory.Create(); contextAdapterMock = Substitute.For <IContextAdapter>(); contextAdapterMock.Context.Returns(context); }
public async Task InnerInsert(IEnumerable <TSource> source, IContextAdapter contextAdapter) { if (source == null) { return; } var extractor = _extractor.Compile(); var s = source.Where(o => extractor(o) != null).ToArray(); if (!s.Any()) { return; } var copy = GetCopyPk(contextAdapter); foreach (var parent in s) { foreach (var child in extractor(parent)) { copy.Invoke(parent, child); } } await contextAdapter.BulkInsertCascade(s.SelectMany(extractor).Distinct().ToArray(), _cascades); }
public static async Task BulkInsertWithIdGeneration <T>(this IContextAdapter contextAdapter, IList <T> forSave) where T : class { if (forSave == null) { return; } var pk = contextAdapter.GetPk <T>(); if (!pk.IsIdentity) { await contextAdapter.BulkInsert(forSave, true); } else { var isNew = ExpressHelper.IsPropertyEmpty <T>(pk.PropertyName, pk.Type).Compile(); var newObjects = forSave.Where(isNew).ToArray(); if (!newObjects.Any()) { return; } await contextAdapter.RetrieveIds(newObjects); await contextAdapter.BulkInsert(newObjects, true); } }
public GetAccountCountQueryTests() { context = InMemoryEfCoreContextFactory.Create(); contextAdapter = Substitute.For <IContextAdapter>(); contextAdapter.Context.Returns(context); }
public Handler(IContextAdapter contextAdapter, IBackupService backupService, ISettingsFacade settingsFacade) { this.contextAdapter = contextAdapter; this.backupService = backupService; this.settingsFacade = settingsFacade; }
private Action <TSource, TDestination> GetCopyPk(IContextAdapter contextAdapter) { var expression = ExpressHelper.CreateCopy <TSource, TDestination>( contextAdapter.GetPk <TSource>().PropertyName, contextAdapter.GetForwardKeyProperty <TDestination>(_propertyName, typeof(TSource))); return(expression.Compile()); }
private Action <TSource, TSource> GetCopyPk(IContextAdapter contextAdapter) { var path = ExpressHelper.GetPath(_extractor); var propertyName = contextAdapter.GetBackwardKeyProperty <TSource>(path); var expression = ExpressHelper.CreateCopy <TSource, TSource>( $"{path}.{contextAdapter.GetPk<TSource>().PropertyName}", propertyName); return(expression.Compile()); }
public BackupService(ICloudBackupService cloudBackupService, IFileStore fileStore, ISettingsFacade settingsFacade, IConnectivityAdapter connectivity, IContextAdapter contextAdapter) { this.cloudBackupService = cloudBackupService; this.fileStore = fileStore; this.settingsFacade = settingsFacade; this.connectivity = connectivity; this.contextAdapter = contextAdapter; }
public async Task RetrieveIdsLong <TEntity>(IContextAdapter context, TEntity[] entities) { var tableName = context.GetTableName <TEntity>(); var entitiesLength = entities.Length; var minId = Minus(await context.RunScalar <TValue>(RetrieveIdsSql(tableName, entitiesLength)), entitiesLength); var pkSetter = ExpressHelper.GetPropSetter <TEntity, TValue>(context.GetPk <TEntity>().PropertyName).Compile(); var id = minId; foreach (var entity in entities) { id = AddOne(id); pkSetter(entity, id); } }
public BackupService(ICloudBackupService cloudBackupService, IFileStore fileStore, ISettingsFacade settingsFacade, IConnectivityAdapter connectivity, IContextAdapter contextAdapter, IMessenger messenger, IToastService toastService) { this.cloudBackupService = cloudBackupService; this.fileStore = fileStore; this.settingsFacade = settingsFacade; this.connectivity = connectivity; this.contextAdapter = contextAdapter; this.messenger = messenger; this.toastService = toastService; }
public static async Task BulkInsert <T>(this IContextAdapter contextAdapter, IEnumerable <T> entities, bool keepIdentity = false) { var sqlTransaction = contextAdapter.GeTransaction(); using var sqlBulkCopy = new SqlBulkCopy(sqlTransaction.Connection, keepIdentity ? SqlBulkCopyOptions.KeepIdentity : SqlBulkCopyOptions.Default, sqlTransaction) { BulkCopyTimeout = BulkCopyTimeout, DestinationTableName = contextAdapter.GetTableName <T>() }; var table = contextAdapter.GetDataTable(entities); foreach (var column in table.Columns.OfType <DataColumn>().Select(o => o.ColumnName)) { sqlBulkCopy.ColumnMappings.Add(column, column); } await sqlBulkCopy.WriteToServerAsync(table); }
public static async Task BulkInsertCascade <T>(this IContextAdapter contextAdapter, IList <T> forSave, params ICascade <T>[] cascades) where T : class { if (forSave == null || !forSave.Any()) { return; } foreach (var cascade in cascades.Where(o => o.IsCascadeBeforeInsert)) { await cascade.InnerInsert(forSave, contextAdapter); } await contextAdapter.BulkInsertWithIdGeneration(forSave); foreach (var cascade in cascades.Where(o => !o.IsCascadeBeforeInsert)) { await cascade.InnerInsert(forSave, contextAdapter); } }
/// <summary> /// Set various HTTP headers on the JavaScript response. /// </summary> /// <param name="context"></param> /// <param name="hash"></param> /// <param name="contentLength"></param> /// <param name="contentType"></param> private void SetHeaders(IContextAdapter context, string hash, int contentLength, string contentType) { try { context.Response.SetHeader("Content-Type", $"application/{contentType}"); context.Response.SetHeader("Content-Length", contentLength.ToString(CultureInfo.InvariantCulture)); context.Response.SetHeader("Cache-Control", _cacheControl); if (string.IsNullOrEmpty(_headersAffectingJavaScript.ToString()) == false) { context.Response.SetHeader("Vary", _headersAffectingJavaScript); } context.Response.SetHeader("ETag", new StringValues( new string[] { hash, })); } catch (InvalidOperationException ex) { _logger.LogWarning(ex, Messages.MessageJavaScriptCachingError); } }
private static DataTable GetDataTable <T>(this IContextAdapter contextAdapter, IEnumerable <T> entities) { var propertyMaps = contextAdapter.GetProperties <T>().ToArray(); var table = propertyMaps.CreateTable(); var columns = propertyMaps.Select(o => new { o.ColumnName, GetValue = o.IsDiscriminator ? x => contextAdapter.GetDiscriminatorValue(x.GetType()) : ExpressHelper.GetPropGetter <T>(o.PropertyName).Compile(), o.ValueTransform }).ToArray(); foreach (var entity in entities) { var dataRow = table.Rows.Add(); foreach (var column in columns) { dataRow[column.ColumnName] = column.ValueTransform(column.GetValue(entity)) ?? DBNull.Value; } } return(table); }
public async Task InnerInsert(IEnumerable <TSource> source, IContextAdapter contextAdapter) { if (source == null) { return; } var extractor = _extractor.Compile(); var s = source.Where(o => extractor(o) != null).ToArray(); if (!s.Any()) { return; } var copyPk = GetCopyPk(contextAdapter); var destinations = s.Select(extractor).Distinct().ToArray(); await contextAdapter.BulkInsertCascade(destinations, _cascades); foreach (var destination in s) { copyPk(destination, destination); } }
public GetCategorySummaryQueryHandler(IContextAdapter contextAdapter) { this.contextAdapter = contextAdapter; }
/// <summary> /// This is meant to be the injected constructor /// </summary> /// <param name="iocContainer">The <seealso cref="AutoFac.IContainer"/> to create lifetime scopes with for resolving business object types that implement IBusinessScope</param> public DataPortalActivator(IContextAdapter contextAdapter) { this._contextAdapter = contextAdapter; Container = null; // Clear the thread storage }
private void ServeContent(IContextAdapter context, IFlowData flowData, ContentType contentType) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (flowData == null) { throw new ArgumentNullException(nameof(flowData)); } context.Response.Clear(); context.Response.ClearHeaders(); // Get the hash code. var hash = flowData.GenerateKey(_pipeline.EvidenceKeyFilter).GetHashCode(); if (int.TryParse(context.Request.GetHeaderValue("If-None-Match"), out int previousHash) && hash == previousHash) { // The response hasn't changed so respond with a 304. context.Response.StatusCode = 304; } else { // Otherwise, return the requested content to the client. string content = null; switch (contentType) { case ContentType.JavaScript: var jsElement = flowData.Pipeline.GetElement <JavaScriptBuilderElement>(); if (jsElement == null) { throw new PipelineConfigurationException( Messages.ExceptionNoJavaScriptBuilder); } var jsData = flowData.GetFromElement(jsElement); content = jsData?.JavaScript; break; case ContentType.Json: var jsonElement = flowData.Pipeline.GetElement <JsonBuilderElement>(); if (jsonElement == null) { throw new PipelineConfigurationException( Messages.ExceptionNoJsonBuilder); } var jsonData = flowData.GetFromElement(jsonElement); content = jsonData?.Json; break; default: break; } int length = 0; if (content != null && content.Length > 0) { length = Encoding.UTF8.GetBytes(content).Length; } context.Response.StatusCode = 200; SetHeaders(context, hash.ToString(CultureInfo.InvariantCulture), length, contentType == ContentType.JavaScript ? "x-javascript" : "json"); context.Response.Write(content); } }
public GetCashFlowQueryHandler(IContextAdapter contextAdapter) { this.contextAdapter = contextAdapter; }
public Handler(IContextAdapter contextAdapter, ISystemDateHelper systemDateHelper) { this.contextAdapter = contextAdapter; this.systemDateHelper = systemDateHelper; }
public Handler(IContextAdapter contextAdapter, IBackupService backupService) { this.contextAdapter = contextAdapter; this.backupService = backupService; }
/// <summary> /// All possible values /// </summary> /// <param name="iocContainer">The <seealso cref="AutoFac.IContainer"/> to create lifetime scopes with for resolving business object types that implement IBusinessScope</param> public DataPortalActivator(IContainer iocContainer, IContextAdapter contextAdapter) { this._contextAdapter = contextAdapter; this._iocContainer = iocContainer; }
public GenericRepository(IContextAdapter adapter) { _DbContext = adapter.GetContext(); _DbSet = _DbContext.Set <T>(); }
public GetCategorySpreadingQueryHandler(IContextAdapter contextAdapter) { this.contextAdapter = contextAdapter; }
/// <summary> /// constructs a ObjectActivator assuming it is the server /// Since the container is not sent in with the constructor it needs to be set /// using the container property /// </summary> /// <param name="iocContainer">The <seealso cref="AutoFac.IContainer"/> to create lifetime scopes with for resolving business object types that implement IBusinessScope</param> internal DataPortalActivator() { _contextAdapter = new ContextAdapter(); Container = null; // Clear the thread storage }
public GetAccountProgressionHandler(IContextAdapter contextAdapter) { this.contextAdapter = contextAdapter; }
public GetCategoryProgressionHandler(IContextAdapter contextAdapter) { this.contextAdapter = contextAdapter; }
/// <summary> /// Add the JSON from the flow data object to the HttpResponse /// </summary> /// <param name="context"> /// An <see cref="IContextAdapter"/> representing the HttpResponse /// to add the JSON to. /// </param> /// <param name="flowData"> /// The flow data to get the JSON from. /// </param> /// <exception cref="ArgumentNullException"> /// Thrown if a required parameter is null. /// </exception> public void ServeJson(IContextAdapter context, IFlowData flowData) { ServeContent(context, flowData, ContentType.Json); }
public Handler(IContextAdapter contextAdapter) { this.contextAdapter = contextAdapter; }
public static async Task RetrieveIds <TEntity>(this IContextAdapter contextAdapter, TEntity[] entities) where TEntity : class { await Worker[contextAdapter.GetPk <TEntity>().Type].RetrieveIdsLong(contextAdapter, entities); }
/// <summary> /// Add the JavaScript from the flow data object to the HttpResponse /// </summary> /// <param name="context"> /// An <see cref="IContextAdapter"/> representing the HttpResponse /// to add the JavaScript to. /// </param> /// <param name="flowData"> /// The flow data to get the JavaScript from. /// </param> /// <exception cref="ArgumentNullException"> /// Thrown if a required parameter is null. /// </exception> public void ServeJavascript(IContextAdapter context, IFlowData flowData) { ServeContent(context, flowData, ContentType.JavaScript); }