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));
        }
Example #2
0
        public virtual MySqlOptionsExtension WithSchemaBehavior(MySqlSchemaBehavior behavior, MySqlSchemaNameTranslator translator = null)
        {
            if (behavior == MySqlSchemaBehavior.Translate && translator == null)
            {
                throw new ArgumentException($"The {nameof(translator)} parameter is mandatory when using `{nameof(MySqlSchemaBehavior)}.{nameof(MySqlSchemaBehavior.Translate)}` as the specified behavior.");
            }

            var clone = (MySqlOptionsExtension)Clone();

            clone.SchemaBehavior       = behavior;
            clone.SchemaNameTranslator = behavior == MySqlSchemaBehavior.Translate
                ? translator
                : null;

            return(clone);
        }
Example #3
0
 /// <summary>
 ///     Configures the behavior for cases when a schema has been set for an entity. Because
 ///     MySQL does not support the EF Core concept of schemas, the default is to throw an
 ///     exception.
 /// </summary>
 public virtual MySqlDbContextOptionsBuilder SchemaBehavior(MySqlSchemaBehavior behavior, MySqlSchemaNameTranslator translator = null)
 => WithOption(e => e.WithSchemaBehavior(behavior, translator));