servicestack ormlite GetLastInsertId指定的强制转换无效。错误
我正在使用Ormlite插入一条记录,如下所示:
servicestack ormlite GetLastInsertId指定的强制转换无效。错误,
servicestack,
ormlite-servicestack,
servicestack,
ormlite Servicestack,我正在使用Ormlite插入一条记录,如下所示: public static Address Add(Address model) { using (IDbConnection db = DbFactory.OpenDbConnection()) { db.Insert(model); var lastId = db.GetLastInsertId();
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和返回值的一些问题
非常感谢您的帮助。我认为此版本的ServiceStack.Ormlite
存在一些问题。我能够复制这个问题。它只需使用以前的版本即可工作
您可以使用Nuget数据包管理器控制台安装以前的版本。在这种情况下,如果您不知道如何使用数据包管理器控制台安装旧版本,则如下所示:
Install-Package Package-Name-Here -Version Version-You-Want-To-Install
我也有同样的问题,发现.58版本也有。以下是我在PackageManager控制台中运行以使其工作的内容:卸载PackageServiceStack.OrmLite.MySql;安装ServiceStack.OrmLite.MySql包-版本3.9。57@Robert谢谢分享这个。。。我只是忘了在58版也不起作用的情况下,在ServiceStack.Ormlite
nice1@Robert之前卸载依赖项。谢谢各位