我正在使用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和返回值的一些问题????
这里有任何帮助。
答案 0 :(得分:4)
我认为此版本的ServiceStack.Ormlite
存在一些问题。我能够重现这个问题。只需使用以前的版本即可。
您可以使用Nuget Packet Manager Console
安装以前的版本。如果您不知道如何使用Packet Manager Console安装旧版本,那么它是:
Install-Package Package-Name-Here -Version Version-You-Want-To-Install