ormlite GetLastInsertId赋予指定的强制转换无效。错误

时间:2013-08-30 22:44:30

标签: servicestack ormlite-servicestack

我正在使用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 ;

我一直使用这个带有mysql的ormlite,而且我从来没有遇到过这个问题,而且我在很长一段时间内第一次抓住了我的头。

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

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

这里有任何帮助。

1 个答案:

答案 0 :(得分:4)

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

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

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