1

有一个包含三列的用户帐户表:ID(int, not null)、UserName(varchar(20)) 和 Email(varchar(50))。列 ID 是主键并具有 auto_increment 约束。有一个实体类 AccountInfo 映射到该表。当我调用 insert 方法时,它会抛出 “Specified cast is not valid”。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) 获取IdentitySql

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

1 回答 1

2

我查看了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";
    }
于 2013-11-11T04:31:54.783 回答