gpt4 book ai didi

c# - 在 MySQL 数据库中执行插入方法时,Dapper 扩展抛出指定的转换无效

转载 作者:行者123 更新时间:2023-11-29 06:43:48 25 4
gpt4 key购买 nike

有一个包含三列的用户帐户表:ID(int, not null)、UserName(varchar(20)) 和 Email(varchar(50))。列 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) 获取IdentitySql

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

最佳答案

查看MySql版本后,发现server版本是5.6,connector net是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";
}

关于c# - 在 MySQL 数据库中执行插入方法时,Dapper 扩展抛出指定的转换无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19861455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com