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)); }
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); }
/// <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));