Dapper extensions throws El molde especificado no es válido cuando el método de inserción se ejecuta en la base de datos MySQL

c# dapper mysql

Pregunta

Hay una tabla de cuentas de usuario con tres columnas: ID (int, not null), UserName (varchar (20)) y Email (varchar (50)). El ID de la columna es la clave principal y con la restricción auto_increment. Hay una clase de entidad AccountInfo asignada a la tabla. Cuando llamo al método de insertar, lanzará 'El lanzamiento especificado no es válido'. alineado 879 en el método QueryInternal. Pero si elimino el ID de propiedad de la entidad AccountInfo, funciona bien. ¿Alguien podría hacer alguna sugerencia? Gracias.

Algunos códigos están aquí:

1) Método de inserción

public dynamic Insert<T>(IDbConnection conn, T entity, IDbTransaction transaction = null) where T : class
{
    dynamic result = conn.Insert<T>(entity, transaction);
    return result;
}



public dynamic Insert<T>(IDbConnection connection, T entity, IDbTransaction transaction, int? commandTimeout) where T : class
{
//...
    if (SqlGenerator.SupportsMultipleStatements())
    {
        sql += SqlGenerator.Configuration.Dialect.BatchSeperator + SqlGenerator.IdentitySql(classMap);
        result = connection.Query<long>(sql, entity, transaction, false, commandTimeout, CommandType.Text);
    }
//...
}

2) QueryInternal

while (reader.Read())
{
    yield return (T)func(reader);
}

3) GetIdentitySql

    public override string GetIdentitySql(string tableName)
    {
        return "SELECT LAST_INSERT_ID() AS Id";
    }

Respuesta popular

Después de verificar la versión de MySql, encontré que la versión del servidor es 5.6, y la red del conector es 6.7.4. Hay un informe de error del sitio web de mysql aquí:

http://bugs.mysql.com/bug.php?id=64084

Así que cambio este método y funciona:

    public override string GetIdentitySql(string tableName)
    {
        return "SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER) AS ID";
    }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow