2013-08-30 33 views
3

我使用Ormlite插入一條記錄如下:ormlite 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; 
    } 

記錄實際上進入數據庫很好,我的第一列是int(11)在mysql數據庫中,並且是第一個名爲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和返回值????

任何幫助在這裏大大讚賞。

回答

4

我認爲這個版本的ServiceStack.Ormlite有一些問題。我能夠重現這個問題。它只會使用以前的版本。

您可以安裝使用Nuget Packet Manager Console以前的版本。如果您不知道如何使用Packet Manager Console安裝舊版本,那麼這裏是:

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

我有同樣的問題,並且發現.58版本也有它。以下是我在軟件包管理器控制檯中運行以獲得此工作的信息: Uninstall-Package ServiceStack.OrmLite.MySql; 安裝包ServiceStack.OrmLite.MySql -Version 3.9.57 – Robert

+1

@Robert Thankx分享此...我只是忘記提及卸載依賴關係在'ServiceStack.Ormlite'之前 –

+0

尼斯@Robert版本58上的點不是工作。多謝你們 – davethecoder

相關問題