Dapper extensions throws MySQLデータベースで挿入メソッドが実行されると、指定されたキャストは無効です

c# dapper mysql

質問

ID(int、not null)、UserName(varchar(20))、Email(varchar(50))の3つの列を持つユーザーアカウントテーブルがあります。列IDは主キーで、auto_increment制約があります。テーブルにマッピングされたエンティティクラスAccountInfoがあります。挿入メソッドを呼び出すと、 '指定されたキャストは無効です。'がスローされます。 QueryInternalメソッド内には879行があります。しかし、AccountInfoエンティティからプロパティIDを削除すると、正常に動作します。誰もが何か提案をすることができますか?ありがとう。

いくつかのコードはここにあります:

1)インサート方法

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

人気のある回答

MySqlのバージョンを確認した後、サーバーのバージョンが5.6で、コネクタのネットが6.7.4であることがわかりました。 mysqlウェブサイトからのバグ報告があります:

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

だから私はこのメソッドを変更し、それは動作します:

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


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ