public void Configure(EntityTypeBuilder <T> builder)
        {
            builder.ConfigBaseEntityForMySQL();

            //这个算逆变/协变?

            /*
             * if (builder is EntityTypeBuilder<IRemove> removeMarkBuilder)
             * {
             *  removeMarkBuilder.ConfigIRemoveEntityForMySQL();
             * }
             *
             * if (builder is EntityTypeBuilder<IRowVersion> rowVersionBuilder)
             * {
             *  rowVersionBuilder.ConfigRowVersionForMySQL();
             * }*/

            //不行老子就反射,妈的

            var entity_type   = typeof(T);
            var all_methods   = typeof(MySQLExtension).GetMethods();
            var builder_param = new object[] { builder };

            MethodInfo get_method(string name)
            {
                var list = all_methods.Where(x => x.Name == name).ToArray();

                list.Length.Should().Be(1);

                var m = list.First();

                m.IsGenericMethod.Should().BeTrue();

                var res = m.MakeGenericMethod(new Type[] { entity_type });

                return(res);
            }

            if (entity_type.IsAssignableTo_ <ILogicalDeletion>())
            {
                get_method(nameof(MySQLExtension.ConfigRemoveableEntityForMySQL)).Invoke(null, builder_param);
            }

            if (entity_type.IsAssignableTo_ <IRowVersion>())
            {
                get_method(nameof(MySQLExtension.ConfigRowVersionEntityForMySQL)).Invoke(null, builder_param);
            }

            if (entity_type.IsAssignableTo <IUpdateTime>())
            {
                get_method(nameof(MySQLExtension.ConfigUpdateTimeEntityForMySQL)).Invoke(null, builder_param);
            }
        }