Dapper.Contrib - 插入将AutoIncrement BIGINT转换为Int32

时间:2017-08-21 17:55:02

标签: c# mysql dapper dapper-contrib

我有一个以BIGINT列为主键的MySQL表,自动增量值目前为9888008450(明显大于32位数)。

当我从Dapper.Contrib调用insert函数时,它抛出异常:

  

对于Int32,值太大或太小。

此问题仅发生在insert函数中。获取,插入和删除功能可以正常工作。

这是我的测试应用程序:

static void Main(string[] args)
{
    using (var conn = new MySqlConnection(connString))
    {
        try
        {
            conn.Execute("DROP TABLE IF EXISTS Test;");
            conn.Execute("CREATE TABLE Test (AccountNumber BIGINT(20) PRIMARY KEY AUTO_INCREMENT,Name VARCHAR(50) NOT NULL);");
            conn.Execute("ALTER TABLE Test AUTO_INCREMENT = " + ((long)int.MaxValue + 1));
            var test = new Test { Name = "Test Name" };
            conn.Insert(test);
            Console.WriteLine(test.AccountNumber);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
    Console.ReadKey();
}

这是Dapper.Contrib的错误还是我需要在代码中更改某些内容?

修改

刚刚找到这个GitHub Pull Request
看起来没有立即解决此问题的计划。

我在我的代码中创建了这个临时解决方法,如果有人有更好的建议,我一定会很感激:

public static long Insert<T>(T entity) where T : class
{
    try
    {
        conn.Insert(entity);
    }
    catch (OverflowException ex)
    {
        if (ex.TargetSite.DeclaringType == typeof(Convert) && ex.TargetSite.Name == "ToInt32")
            return conn.QuerySingle<long>("SELECT LAST_INSERT_ID();");
    }
}

0 个答案:

没有答案