public DbContextOptions CreateOptions(CharSetBehavior charSetBehavior, CharSet ansiCharSet, CharSet unicodeCharSet) { var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseMySql("Database=DummyDatabase", b => b.CharSetBehavior(charSetBehavior).AnsiCharSet(ansiCharSet).UnicodeCharSet(unicodeCharSet)); return(optionsBuilder.Options); }
/// <summary> /// This API supports the Entity Framework Core infrastructure and is not intended to be used /// directly from your code. This API may change or be removed in future releases. /// </summary> public MySqlOptionsExtension WithCharSetBehavior(CharSetBehavior charSetBehavior) { var clone = (MySqlOptionsExtension)Clone(); clone.NullableCharSetBehavior = charSetBehavior; return(clone); }
protected virtual void Generate(Action <ModelBuilder> buildAction, CharSetBehavior charSetBehavior, CharSet charSet, params MigrationOperation[] operations) { var services = MySqlTestHelpers.Instance.CreateContextServices(charSetBehavior, charSet); var modelBuilder = MySqlTestHelpers.Instance.CreateConventionBuilder(services); buildAction(modelBuilder); var batch = services.GetRequiredService <IMigrationsSqlGenerator>() .Generate(ResetSchema(operations), modelBuilder.Model); Sql = string.Join( EOL, batch.Select(b => b.CommandText)); }
public virtual void AddColumnOperation_with_charSet_implicit(bool?isUnicode, bool isIndex, CharSetBehavior charSetBehavior, string charSetName, bool expectExplicitCharSet) { var charSet = CharSet.GetCharSetFromName(charSetName); var expectedCharSetName = expectExplicitCharSet ? $" CHARACTER SET {charSet}" : string.Empty; Generate( modelBuilder => modelBuilder.Entity("Person", eb => { var pb = eb.Property <string>("Name"); if (isUnicode.HasValue) { pb.IsUnicode(isUnicode.Value); } if (isIndex) { eb.HasIndex("Name"); } }), charSetBehavior, charSet, new AddColumnOperation { Table = "Person", Name = "Name", ClrType = typeof(string), IsUnicode = isUnicode, IsNullable = true }); var columnType = "longtext"; if (isIndex) { var serverVersion = new ServerVersion(); var columnSize = Math.Min(serverVersion.MaxKeyLength / (charSet.MaxBytesPerChar * 2), 255); columnType = $"varchar({columnSize})"; } Assert.Equal( $"ALTER TABLE `Person` ADD `Name` {columnType}{expectedCharSetName} NULL;" + EOL, Sql); }
public virtual void AddColumnOperation_with_charset(bool isUnicode, bool isIndex, CharSetBehavior charSetBehavior, CharSet ansiCharSet, CharSet unicodeCharSet, string expectedCharSet) { Generate( modelBuilder => modelBuilder.Entity("Person", eb => { eb.Property <string>("Name").IsUnicode(isUnicode); if (isIndex) { eb.HasIndex("Name"); } }), charSetBehavior, ansiCharSet, unicodeCharSet, new AddColumnOperation { Table = "Person", Name = "Name", ClrType = typeof(string), IsUnicode = isUnicode, IsNullable = true }); var appendCharSet = ""; if (!string.IsNullOrEmpty(expectedCharSet)) { appendCharSet = $" CHARACTER SET {expectedCharSet}"; } var columnType = "longtext"; if (isIndex) { var serverVersion = new ServerVersion(null); var charSetInfo = isUnicode ? new CharSetInfo(unicodeCharSet) : new CharSetInfo(ansiCharSet); var columnSize = Math.Min(serverVersion.MaxKeyLength / (charSetInfo.BytesPerChar * 2), 255); columnType = $"varchar({columnSize})"; } Assert.Equal( $"ALTER TABLE `Person` ADD `Name` {columnType}{appendCharSet} NULL;" + EOL, Sql); }
public IServiceProvider CreateContextServices(CharSetBehavior charSetBehavior, CharSet charSet) => ((IInfrastructure <IServiceProvider>) new DbContext(CreateOptions(charSetBehavior, charSet))).Instance;
/// <summary> /// Configures the Default CharSet Behavior /// </summary> public virtual MySqlDbContextOptionsBuilder CharSetBehavior(CharSetBehavior charSetBehavior) => WithOption(e => e.WithCharSetBehavior(charSetBehavior));
private void Generate( Action <ModelBuilder> buildAction, MigrationOperation operation, CharSetBehavior charSetBehavior, CharSet charSet) => Generate(buildAction, new[] { operation }, default, charSetBehavior, charSet);
public DbContextOptions CreateOptions(CharSetBehavior charSetBehavior, CharSet charSet) => CreateOptions( b => b.CharSetBehavior(charSetBehavior) .CharSet(charSet));