1

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) 内部クエリ

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

3) GetIdentitySql

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

1 に答える 1

2

MySql のバージョンを確認したところ、サーバーのバージョンは 5.6、コネクタ ネットは 6.7.4 でした。ここに mysql Web サイトからのバグ レポートがあります。

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

だから私はこの方法を変更し、それは動作します:

    public override string GetIdentitySql(string tableName)
    {
        return "SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER) AS ID";
    }
于 2013-11-11T04:31:54.783 に答える