public static TRepo CreateWriteableRepo <

            TRepo, TEntity, TContext, T>(ConfigurationFactory <T> factory,
                                         string testUser = DEFAULT_USER
                                         )
            where TEntity : class, IHasSysUser, new()
            where TContext : DbContext
            where TRepo : WriteableRepo <TEntity, TContext>
            where T : class
        {
            var databaseName = factory.Configuration.GetDatabaseName <TContext>();
            var instanceName = Guid.NewGuid().ToString();

            TestDbContextManager <TContext> .CreateInMemoryDatabase(
                databaseName, instanceName, out DbContextOptions <TContext> options,
                out TContext context);

            var scopeProperties = new ScopeProperties {
                User = testUser
            };


            scopeProperties.OtherProperties.Add("InstanceName", instanceName);
            scopeProperties.OtherProperties.Add("DbContextOptions", options);

            var repo = Activator.CreateInstance(typeof(TRepo),
                                                new object[] { context, scopeProperties }) as TRepo;

            return(repo);
        }
Exemple #2
0
        private void GetOrAddInMemoryDatabase(TRepo repo, TestDbContextCache <TContext> cache,
                                              string instanceName, string baseDatabaseName)
        {
            if (cache.ContainsKey(instanceName))
            {
                repo.Context = cache[instanceName];
                _logger.LogInformation($"Using existing in-memory database {baseDatabaseName}, instance = {instanceName}");
            }
            else
            {
                _logger.LogInformation($"Creating in-memory database {baseDatabaseName}, instance = {instanceName}");
                var dbContext = TestDbContextManager <TContext> .CreateInMemoryDatabase(baseDatabaseName, instanceName);

                repo.Context = dbContext;
                repo.Context.Database.EnsureCreated();
                cache.Add(instanceName, repo.Context);
            }
        }
        public static TRepo CreateWriteableTemporalRepo <
            TRepo, TEntity, TContext, THistoryContext, T>(ConfigurationFactory <T> factory,
                                                          string testUser = DEFAULT_USER
                                                          )

            where TEntity : class, IEFCoreTemporalModel, new()
            where TContext : DbContext
            where THistoryContext : DbContext
            where TRepo : WriteableTemporalRepo <TEntity, TContext, THistoryContext>
            where T : class
        {
            var databaseName = factory.Configuration.GetDatabaseName <TContext>();
            var instanceName = Guid.NewGuid().ToString();

            var historyDatabaseName = factory.Configuration.GetDatabaseName <THistoryContext>();
            var historyInstanceName = instanceName + Interceptor.HISTORY_INSTANCE_SUFFIX;


            TestDbContextManager <TContext> .CreateInMemoryDatabase(
                databaseName, instanceName, out DbContextOptions <TContext> options,
                out TContext context);

            TestDbContextManager <THistoryContext> .CreateInMemoryDatabase(
                historyDatabaseName, historyInstanceName,
                out DbContextOptions <THistoryContext> historyOptions,
                out THistoryContext historyContext);

            var scopeProperties = new ScopeProperties {
                User = testUser
            };

            scopeProperties.OtherProperties.Add("InstanceName", instanceName);
            scopeProperties.OtherProperties.Add("HistoryInstanceName", historyInstanceName);
            scopeProperties.OtherProperties.Add("DbContextOptions", options);
            scopeProperties.OtherProperties.Add("HistoryDbContextOptions", historyOptions);


            var repo = Activator.CreateInstance(typeof(TRepo),
                                                new object[] { context, historyContext, scopeProperties }) as TRepo;

            return(repo);
        }
        private void GetOrAddInMemoryHistoryDatabase(TRepo repo,
                                                     TestDbContextOptionsCache <THistoryContext> cache,
                                                     string instanceName, string baseDatabaseName)
        {
            if (cache.ContainsKey(instanceName))
            {
                _logger.LogInformation($"Using existing in-memory history database {baseDatabaseName}, instance = {instanceName}");
                TestDbContextManager <THistoryContext> .CreateInMemoryDatabase(cache[instanceName], out THistoryContext context);

                repo.HistoryContext = context;
            }
            else
            {
                _logger.LogInformation($"Creating in-memory history database {baseDatabaseName}, instance = {instanceName}");
                TestDbContextManager <THistoryContext> .CreateInMemoryDatabase(baseDatabaseName, instanceName,
                                                                               out DbContextOptions <THistoryContext> options, out THistoryContext context);

                repo.HistoryContext = context;
                repo.HistoryContext.Database.EnsureCreated();
                cache.Add(instanceName, options);
            }
        }