Les extensions Dapper lève La distribution spécifiée n'est pas valide lorsque la méthode d'insertion est exécutée dans la base de données MySQL

c# dapper mysql

Question

Il existe une table de compte utilisateur avec trois colonnes: ID (int, non null), UserName (varchar (20)) et Email (varchar (50)). L'ID de la colonne est la clé primaire et avec la contrainte auto_increment. Il existe une classe d'entité AccountInfo mappée à la table. Lorsque j'appelle la méthode d'insertion, elle lancera «La distribution spécifiée n'est pas valide». 879 doublé dans la méthode QueryInternal. Mais si je supprime l'ID de propriété de l'entité AccountInfo, cela fonctionne correctement. Quelqu'un pourrait-il faire des suggestions? Merci.

Certains codes sont ici:

1) méthode d'insertion

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";
    }

Réponse populaire

Après avoir vérifié la version de MySql, j'ai constaté que la version du serveur était 5.6 et que le connecteur net était 6.7.4. Il y a un rapport de bug sur le site mysql ici:

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

Donc je change cette méthode et ça marche:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi