예제 #1
0
        public static DbContextOptions FixDistinctCount(this DbContextOptions options)
        {
            Type optionsBuilderType = typeof(DbContextOptionsBuilder <>).MakeGenericType(options.ContextType);
            var  optionsBuilder     = (DbContextOptionsBuilder)Activator.CreateInstance(optionsBuilderType);

            RelationalOptionsExtension relationalOptionsExtension = options.Extensions.OfType <RelationalOptionsExtension>().Single();
            var serviceCollection = new ServiceCollection();

            relationalOptionsExtension.ApplyServices(serviceCollection);
            ServiceDescriptor serviceDescriptor = serviceCollection.Single(sd => sd.ServiceType == typeof(IRelationalSqlTranslatingExpressionVisitorFactory));

            Type fixFactoryType = typeof(FixRelationalSqlTranslatingExpressionVisitorFactory <>).MakeGenericType(serviceDescriptor.ImplementationType);
            Func <DbContextOptionsBuilder> func = optionsBuilder.ReplaceService <Object, Object>;
            MethodInfo replaceServiceMethod     = func.Method.GetGenericMethodDefinition().MakeGenericMethod(typeof(IRelationalSqlTranslatingExpressionVisitorFactory), fixFactoryType);

            replaceServiceMethod.Invoke(optionsBuilder, null);

            DbContextOptions contextOptions = optionsBuilder.Options;

            foreach (IDbContextOptionsExtension extension in options.Extensions)
            {
                if (extension is CoreOptionsExtension coreOptionsExtension)
                {
                    CoreOptionsExtension?newCoreOptions = null;
                    if (coreOptionsExtension.ReplacedServices != null)
                    {
                        newCoreOptions = contextOptions.GetExtension <CoreOptionsExtension>();
                        foreach (KeyValuePair <Type, Type> replacedService in coreOptionsExtension.ReplacedServices)
                        {
                            newCoreOptions = newCoreOptions.WithReplacedService(replacedService.Key, replacedService.Value);
                        }
                    }

                    if (coreOptionsExtension.LoggerFactory != null)
                    {
                        if (newCoreOptions == null)
                        {
                            newCoreOptions = contextOptions.GetExtension <CoreOptionsExtension>();
                        }
                        newCoreOptions = newCoreOptions.WithLoggerFactory(coreOptionsExtension.LoggerFactory);
                    }

                    if (newCoreOptions != null)
                    {
                        contextOptions = contextOptions.WithExtension(newCoreOptions);
                    }
                }
                else
                {
                    var withExtensionFunc = (Func <IDbContextOptionsExtension, DbContextOptions>)contextOptions.WithExtension <IDbContextOptionsExtension>;
                    var withExtension     = withExtensionFunc.Method.GetGenericMethodDefinition().MakeGenericMethod(new[] { extension.GetType() });
                    contextOptions = (DbContextOptions)withExtension.Invoke(contextOptions, new[] { extension });
                }
            }

            return(contextOptions);
        }
 protected override void OnConfiguring(DbContextOptionsBuilder builder)
 {
     if (IsAppRunning())
     {
         builder.UseNpgsql(new ApplicationSettings().ConnectionString());
     }
     else
     {
         var inMemoryOptions = _options.GetExtension <InMemoryOptionsExtension>();
         builder.UseInMemoryDatabase(databaseName: inMemoryOptions.StoreName);
     }
 }
예제 #3
0
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            var sqlServerOptions = options.GetExtension <SqlServerOptionsExtension>();

            optionsBuilder.UseSqlServer(sqlServerOptions.ConnectionString);
        }
예제 #4
0
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            var sqlServerOptions = options.GetExtension <SqlServerOptionsExtension>();

            optionsBuilder.UseSqlServer(sqlServerOptions.ConnectionString, b => b.MigrationsAssembly("GST.Data"));
        }
예제 #5
0
        public PersistentMessagingDbContext([NotNull] DbContextOptions options) : base(options)
        {
            var serviceProvider = options.GetExtension <CoreOptionsExtension>().ApplicationServiceProvider;

            EntityMessagesExtractor = serviceProvider.GetService <IEntityMessagesExtractor>() ??
                                      throw new InvalidOperationException(
                                                $"Service {nameof(IEntityMessagesExtractor)} wasn't registered in service collections; Please use AddRabbitaPersistent");
        }
예제 #6
0
 public BioEkoFitContext(DbContextOptions <BioEkoFitContext> options) : base(options)
 {
     _connectionString = options.GetExtension <NpgsqlOptionsExtension>()?.ConnectionString;
     if (string.IsNullOrEmpty(_connectionString))
     {
         throw new ArgumentNullException(nameof(options));
     }
 }
예제 #7
0
 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
 {
     if (_options?.GetExtension <SqliteOptionsExtension>() == null)
     {
         optionsBuilder.UseSqlite("Data Source=ChecklistBot.db");
     }
     base.OnConfiguring(optionsBuilder);
 }
        public static T GetService <T>(this DbContextOptions options)
        {
            Ensure.NotNull(options, nameof(options));

            var serviceProvider = options.GetExtension <CoreOptionsExtension>().ApplicationServiceProvider;

            return((T)serviceProvider?.GetService(typeof(T)));
        }
예제 #9
0
        public static T GetService <T>(this DbContextOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var serviceProvider = options.GetExtension <CoreOptionsExtension>().ApplicationServiceProvider;

            return((T)serviceProvider?.GetService(typeof(T)));
        }
예제 #10
0
 public DbContext(DbContextOptions <DbContext> options)
     : base(options)
 {
     try
     {
         connectionString = options.GetExtension <SqlServerOptionsExtension>().ConnectionString;
     }
     catch (Exception)
     {
         connectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"D:\\New folder\\Visual Studio 2019\\projects\\EncryptedLegder\\EncryptedLedgerExample\\Database.mdf\";Integrated Security=True";
     }
     OnCreated();
 }
예제 #11
0
        public BlogDbContext(DbContextOptions <BlogDbContext> options) : base(new DbContextOptionsBuilder(options).Options)
        {
            var ext = options.GetExtension <CoreOptionsExtension>();

            _provider = ext.ApplicationServiceProvider;
        }
예제 #12
0
 public DbConnection(DbContextOptions <DbConnection> options) : base(options)
 {
     ConnectionString = options.GetExtension <SqlServerOptionsExtension>().ConnectionString;
 }
예제 #13
0
 public curlingContext(DbContextOptions <curlingContext> options)
 {
     _connectionString = options?.GetExtension <SqlServerOptionsExtension>()?.ConnectionString;
 }