gpt4 book ai didi

servicestack - ormlite GetLastInsertId 给出指定的转换无效。错误

转载 作者:行者123 更新时间:2023-12-04 02:47:43 26 4
gpt4 key购买 nike

我正在使用 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 有一些问题。我能够重现这个问题。只需使用以前的版本即可使用。

您可以使用 Nuget 数据包管理器控制台 安装以前的版本。如果您不知道如何使用数据包管理器控制台安装旧版本,那么这里是:

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

关于servicestack - ormlite GetLastInsertId 给出指定的转换无效。错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com