Beispiel #1
0
 public static void AddOptions(MySqlDbContextOptionsBuilder builder)
 {
     builder
     .CommandTimeout(GetCommandTimeout())
     .ServerVersion(AppConfig.ServerVersion.Version, AppConfig.ServerVersion.Type)
     .CharSetBehavior(CharSetBehavior.AppendToAllColumns)
     .CharSet(CharSet.Utf8Mb4);
 }
Beispiel #2
0
 public static void AddOptions(MySqlDbContextOptionsBuilder builder, bool noBackslashEscapes)
 {
     AddOptions(builder);
     if (noBackslashEscapes)
     {
         builder.DisableBackslashEscaping();
     }
 }
Beispiel #3
0
        void MysqlOptions(MySqlDbContextOptionsBuilder options)
        {
            //options.CharSetBehavior(CharSetBehavior.NeverAppend);
            options.SchemaBehavior(MySqlSchemaBehavior.Translate, Translator);
            options.MigrationsHistoryTable(Translator(_schema, HistoryRepository.DefaultTableName));

            options.EnableRetryOnFailure(10);
        }
        protected virtual void Generate(
            Action <ModelBuilder> buildAction,
            MigrationOperation[] operation,
            MigrationsSqlGenerationOptions options,
            CharSetBehavior?charSetBehavior,
            [CanBeNull] CharSet charSet,
            MySqlSchemaNameTranslator schemaNameTranslator = null)
        {
            var optionsBuilder      = new DbContextOptionsBuilder(ContextOptions);
            var mySqlOptionsBuilder = new MySqlDbContextOptionsBuilder(optionsBuilder);

            if (charSetBehavior != null)
            {
                mySqlOptionsBuilder.CharSetBehavior(charSetBehavior.Value);
            }

            if (charSet != null)
            {
                mySqlOptionsBuilder.CharSet(charSet);
            }

            if (schemaNameTranslator != null)
            {
                mySqlOptionsBuilder.SchemaBehavior(MySqlSchemaBehavior.Translate, schemaNameTranslator);
            }

            var contextOptions = optionsBuilder.Options;

            var services = ContextOptions != null
                ? TestHelpers.CreateContextServices(CustomServices, contextOptions)
                : TestHelpers.CreateContextServices(CustomServices);

            IModel model = null;

            if (buildAction != null)
            {
                var modelBuilder = TestHelpers.CreateConventionBuilder();
                modelBuilder.Model.RemoveAnnotation(CoreAnnotationNames.ProductVersion);
                buildAction(modelBuilder);

                model = modelBuilder.Model;
                var conventionSet = services.GetRequiredService <IConventionSetBuilder>().CreateConventionSet();

                var typeMappingConvention = conventionSet.ModelFinalizingConventions.OfType <TypeMappingConvention>().FirstOrDefault();
                typeMappingConvention.ProcessModelFinalizing(((IConventionModel)model).Builder, null);

                var relationalModelConvention = conventionSet.ModelFinalizedConventions.OfType <RelationalModelConvention>().First();
                model = relationalModelConvention.ProcessModelFinalized((IConventionModel)model);
            }

            var batch = services.GetRequiredService <IMigrationsSqlGenerator>().Generate(operation, model, options);

            Sql = string.Join(
                EOL,
                batch.Select(b => b.CommandText));
        }
Beispiel #5
0
 public static MySqlDbContextOptionsBuilder AddOptions(MySqlDbContextOptionsBuilder builder)
 {
     return(builder
            .UseQuerySplittingBehavior(QuerySplittingBehavior.SingleQuery)
            .CommandTimeout(GetCommandTimeout())
            .ExecutionStrategy(d => new TestMySqlRetryingExecutionStrategy(d)));
     // .EnableIndexOptimizedBooleanColumns(); // TODO: Activate for all test for .NET 5. Tests should use
     //       `ONLY_FULL_GROUP_BY` to ensure correct working of the
     //       expression visitor in all cases, which is blocked by
     //       #1167 for MariaDB.
 }
Beispiel #6
0
 public static void AddOptions(MySqlDbContextOptionsBuilder builder)
 {
     builder
     .CommandTimeout(GetCommandTimeout())
     .ServerVersion(AppConfig.ServerVersion.Version, AppConfig.ServerVersion.Type)
     .CharSetBehavior(CharSetBehavior.AppendToAllColumns)     // TODO: Change to NerverAppend.
     .CharSet(CharSet.Utf8Mb4);
     // .EnableIndexOptimizedBooleanColumns(); // TODO: Activate for all test for .NET 5. Tests should use
     //       `ONLY_FULL_GROUP_BY` to ensure correct working of the
     //       expression visitor in all cases, which is blocked by
     //       #1167 for MariaDB.
 }
        /// <summary>
        ///     Use NetTopologySuite to access MySQL spatial data.
        /// </summary>
        /// <param name="optionsBuilder"> The builder being used to configure MySQL. </param>
        /// <returns> The options builder so that further configuration can be chained. </returns>
        public static MySqlDbContextOptionsBuilder UseNetTopologySuite(
            [NotNull] this MySqlDbContextOptionsBuilder optionsBuilder)
        {
            Check.NotNull(optionsBuilder, nameof(optionsBuilder));

            var coreOptionsBuilder = ((IRelationalDbContextOptionsBuilderInfrastructure)optionsBuilder).OptionsBuilder;

            var extension = coreOptionsBuilder.Options.FindExtension <MySqlNetTopologySuiteOptionsExtension>()
                            ?? new MySqlNetTopologySuiteOptionsExtension();

            ((IDbContextOptionsBuilderInfrastructure)coreOptionsBuilder).AddOrUpdateExtension(extension);

            return(optionsBuilder);
        }
Beispiel #8
0
        public static MySqlDbContextOptionsBuilder ApplyConfiguration(this MySqlDbContextOptionsBuilder optionsBuilder)
        {
            var maxBatch = TestEnvironment.GetInt(nameof(MySqlDbContextOptionsBuilder.MaxBatchSize));

            if (maxBatch.HasValue)
            {
                optionsBuilder.MaxBatchSize(maxBatch.Value);
            }

            optionsBuilder.ExecutionStrategy(d => new TestMySqlRetryingExecutionStrategy(d));

            optionsBuilder.CommandTimeout(MySqlTestStore.DefaultCommandTimeout);

            return(optionsBuilder);
        }
Beispiel #9
0
        public static MySqlDbContextOptionsBuilder UseMicrosoftJson(
            [NotNull] this MySqlDbContextOptionsBuilder optionsBuilder, MySqlJsonChangeTrackingOptions options)
        {
            Check.NotNull(optionsBuilder, nameof(optionsBuilder));

            var coreOptionsBuilder = ((IRelationalDbContextOptionsBuilderInfrastructure)optionsBuilder).OptionsBuilder;

            var extension = (coreOptionsBuilder.Options.FindExtension <MySqlJsonMicrosoftOptionsExtension>() ??
                             new MySqlJsonMicrosoftOptionsExtension())
                            .WithJsonChangeTrackingOptions(options);

            ((IDbContextOptionsBuilderInfrastructure)coreOptionsBuilder).AddOrUpdateExtension(extension);

            return(optionsBuilder);
        }
Beispiel #10
0
        /// <summary>
        ///     Use Json to access MySQL spatial data.
        /// </summary>
        /// <param name="optionsBuilder"> The build being used to configure MySQL. </param>
        /// <returns> The options builder so that further configuration can be chained. </returns>
        public static MySqlDbContextOptionsBuilder UseMicrosoftJson(
            [NotNull] this MySqlDbContextOptionsBuilder optionsBuilder)
        {
            Check.NotNull(optionsBuilder, nameof(optionsBuilder));

            var coreOptionsBuilder = ((IRelationalDbContextOptionsBuilderInfrastructure)optionsBuilder).OptionsBuilder;

            var extension = coreOptionsBuilder.Options.FindExtension <MySqlJsonOptionsExtension>()
                            ?? new MySqlJsonOptionsExtension();

            extension.Serializer = MicrosoftJsonSerializer.Instance;

            ((IDbContextOptionsBuilderInfrastructure)coreOptionsBuilder).AddOrUpdateExtension(extension);

            return(optionsBuilder);
        }
Beispiel #11
0
        public static IServiceCollection AddCloudscribeCoreEFStorageMySql(
            this IServiceCollection services,
            string connectionString,
            bool useSingletonLifetime          = false,
            int maxConnectionRetryCount        = 0,
            int maxConnectionRetryDelaySeconds = 30,
            ICollection <int> transientSqlErrorNumbersToAdd = null,
            MySqlDbContextOptionsBuilder mySqlOptions       = null
            )
        {
            services.AddCloudscribeCoreEFCommon(useSingletonLifetime);

            //services.AddEntityFrameworkMySql()
            //    .AddDbContext<CoreDbContext>(options =>
            //        options.UseMySql(connectionString));

            services   // .AddEntityFrameworkMySql()
            .AddDbContext <CoreDbContext>(options =>
                                          options.UseMySql(connectionString,
                                                           ServerVersion.AutoDetect(connectionString), // breaking change here in Net5.0
                                                           mySqlOptionsAction: sqlOptions =>
            {
                if (mySqlOptions != null)
                {
                    sqlOptions = mySqlOptions;
                }
                if (maxConnectionRetryCount > 0)
                {
                    //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency
                    sqlOptions.EnableRetryOnFailure(
                        maxRetryCount: maxConnectionRetryCount,
                        maxRetryDelay: TimeSpan.FromSeconds(maxConnectionRetryDelaySeconds),
                        errorNumbersToAdd: transientSqlErrorNumbersToAdd);
                }
            }),
                                          optionsLifetime: ServiceLifetime.Singleton
                                          );

            services.AddScoped <ICoreDbContext, CoreDbContext>();
            services.AddScoped <IDataPlatformInfo, DataPlatformInfo>();

            services.AddSingleton <ICoreDbContextFactory, CoreDbContextFactory>();

            return(services);
        }
Beispiel #12
0
        public static MySqlDbContextOptionsBuilder ApplyConfiguration(this MySqlDbContextOptionsBuilder optionsBuilder)
        {
            var maxBatch = TestEnvironment.GetInt(nameof(MySqlDbContextOptionsBuilder.MaxBatchSize));

            if (maxBatch.HasValue)
            {
                optionsBuilder.MaxBatchSize(maxBatch.Value);
            }

            var offsetSupport = TestEnvironment.GetFlag(nameof(MySqlCondition.SupportsOffset)) ?? true;

            if (!offsetSupport)
            {
                optionsBuilder.UseRowNumberForPaging();
            }

            if (TestEnvironment.IsSqlAzure)
            {
                optionsBuilder.ExecutionStrategy(c => new TestMySqlRetryingExecutionStrategy(c));
            }

            return(optionsBuilder);
        }
Beispiel #13
0
 void MysqlOptions(MySqlDbContextOptionsBuilder options)
 {
     options.CharSetBehavior(CharSetBehavior.NeverAppend);
     options.CharSet(CharSet.Utf8);
     //options.MigrationsAssembly("Aper_bot.Database.Migrations");
 }
Beispiel #14
0
 private void MySqlConfiguringOptionBuild(MySqlDbContextOptionsBuilder builder)
 {
     builder.CharSet(CharSet.Utf8Mb4);
 }
Beispiel #15
0
 public static void AddOptions(MySqlDbContextOptionsBuilder builder)
 {
     builder.CommandTimeout(CommandTimeout).ServerVersion(LazyConfig.Value["Data:ServerVersion"]);
 }
Beispiel #16
0
 protected virtual MySqlDbContextOptionsBuilder GetMySqlDbContextOptions(MySqlDbContextOptionsBuilder optionsBuilder) =>
 optionsBuilder.CommandTimeout(1800);
 /// <summary>
 /// 重写以实现<see cref="MySqlDbContextOptionsBuilder"/>的自定义行为
 /// </summary>
 protected virtual void  MySqlDbContextOptionsBuilderAction(MySqlDbContextOptionsBuilder options)
 {
 }
 private static void Configure(DatabaseParameters parameters, MySqlDbContextOptionsBuilder builder)
 {
     builder
     .UnicodeCharSet(CharSet.Utf8mb4)
     .ServerVersion(parameters.Version);
 }