protected void MapProperty <TProperty>(int columnIndex,
                                               Expression <Func <TEntity, TProperty> > mappingExpression)
        {
            var propertyName = GetPropertyNameFromExpression(mappingExpression);
            var mapper       = PropertyMapperFactory.CreateMapper <TEntity>(propertyName);
            var mapping      = new CsvPropertyMapping(columnIndex, mapper);

            _mappings.Insert(columnIndex, mapping);
            _numCols++;
        }
        public static IUtf8PropertyMapper <TEntity> CreateMapperUtf8 <TEntity>(string propertyName)
        {
            var factory      = new PropertyMapperFactory();
            var propertyInfo = typeof(TEntity).GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);

            var assemblyBuilder = factory.GetAssemblyBuilder("Mappers");
            var moduleBuilder   = factory.GetModuleBuilder(assemblyBuilder);
            var typeBuilder     = factory.GetType(moduleBuilder, typeof(TEntity).Name, typeof(IUtf8PropertyMapper <>).MakeGenericType(typeof(TEntity)));
            var method          = factory.GetMethod(typeBuilder, "Map", typeof(TEntity), typeof(ReadOnlySpan <>).MakeGenericType(typeof(byte)));

            var ilGen = method.GetILGenerator();

            factory.GenerateParseCallUtf8(ilGen, propertyInfo.PropertyType);
            factory.GenerateSetProperty(ilGen, propertyInfo);
            ilGen.Emit(OpCodes.Ret);

            typeBuilder.DefineMethodOverride(method, typeof(IUtf8PropertyMapper <>).MakeGenericType(typeof(TEntity)).GetMethod("Map"));

            var type        = typeBuilder.CreateType();
            var constructor = type.GetConstructor(Type.EmptyTypes);
            var casted      = (IUtf8PropertyMapper <TEntity>)constructor.Invoke(null);

            return(casted);
        }