【问题标题】:ormlite GetLastInsertId gives Specified cast is not valid. errorormlite GetLastInsertId 给出了指定的强制转换无效。错误
【发布时间】:2013-08-31 12:20:32
【问题描述】:

我使用Ormlite插入一条记录如下:

public static Address Add(Address model)
    {
        using (IDbConnection db = DbFactory.OpenDbConnection())
            {
                db.Insert(model);
                var lastId = db.GetLastInsertId();
                model.Id = (int) lastId;
                return model;
            }
    }

不过在线var lastId = db.GetLastInsertId();

我收到以下错误:

Message: Specified cast is not valid.

Source: ServiceStack.OrmLite

Stacktrace: at ServiceStack.OrmLite.OrmLiteReadExtensions.GetLongScalar(IDbCommand dbCmd) in c:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite\OrmLiteReadExtensions.cs:line 793
at ServiceStack.OrmLite.ReadConnectionExtensions.Exec[T](IDbConnection dbConn, Func`2 filter) in c:\src\ServiceStack.OrmLite\src\ServiceStack.OrmLite\Expressions\ReadConnectionExtensions.cs:line 31

这指向以下ormlite代码:

public static long GetLongScalar(this IDbCommand dbCmd)
    {
        var result = dbCmd.ExecuteScalar();
        if (result is DBNull) return default(long);
        if (result is int) return (int)result;
        if (result is decimal) return Convert.ToInt64((decimal)result);
#### this line here is 793 if (result is ulong) return Convert.ToInt64(result);
        return (long)result;
    }   

记录实际上进入数据库就好了,我的第一列是mysql数据库中的int(11),并且是名称为Id的第一列。

架构:

CREATE TABLE IF NOT EXISTS `Address` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
  `Street` varchar(255) NOT NULL,
  `StreetTwo` varchar(255) DEFAULT NULL COMMENT 'Street 2:',
  `Town` varchar(100) DEFAULT NULL,
  `City` varchar(100) NOT NULL,
  `County` varchar(255) DEFAULT NULL,
  `Country` varchar(255) DEFAULT NULL,
  `PostCode` varchar(15) DEFAULT NULL COMMENT 'Post Code:',
  `Notes` text,
  `Enabled` tinyint(1) NOT NULL DEFAULT '1',
   PRIMARY KEY (`Id`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

我一直使用这个 ormlite 和 mysql,我从来没有遇到过这个问题,很长一段时间以来我第一次摸不着头脑。

我使用的是 nuget 包 Ormlite.MySQL 3.9.59,它是 nuget 上最新的包。

如果不是因为实际进入的记录,这不会那么奇怪。这似乎是 executeScaler 和返回值的问题????

这里非常感谢任何帮助。

【问题讨论】:

    标签: servicestack ormlite-servicestack


    【解决方案1】:

    我认为这个版本的ServiceStack.Ormlite 存在一些问题。我能够重现这个问题。只需使用以前的版本即可。

    您可以使用Nuget Packet Manager Console 安装以前的版本。如果您不知道如何使用 Packet Manager Console 安装旧版本,那么这里是:

    Install-Package Package-Name-Here -Version Version-You-Want-To-Install
    

    【讨论】:

    • 我也有同样的问题,发现.58版本也有。这是我在包管理器控制台中运行以使其正常工作的内容: Uninstall-Package ServiceStack.OrmLite.MySql;安装包ServiceStack.OrmLite.MySql -Version 3.9.57
    • @Robert 感谢分享这个...我只是忘了提到在ServiceStack.Ormlite之前卸载依赖项
    • Nice 1 @Robert,版本 58 上的位置也不起作用。谢谢大家
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多