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);
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
        }
예제 #5
0
        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;
예제 #7
0
 /// <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));