【发布时间】: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