2009-08-26 95 views
3

我認爲這在其他地方已有報道,但我現在沒有看到它。無論如何,有一個簡單的v3查詢問題。使用SQLite ADO.NET提供程序1.0.65.0。我的表結構是這樣的:SQLite Int64與Int32問題和SubSonic ActiveRecord

CREATE TABLE "SamplerData" ("RowId" INT PRIMARY KEY NOT NULL ,"SampName" VARCHAR(128),"SampPurpose" VARCHAR(2048),"ActiveState" INTEGER NOT NULL DEFAULT 1) 

我Structs1.cs文件中有這樣的吧:

 Columns.Add(new DatabaseColumn("RowId", this) 
     { 
       IsPrimaryKey = true, 
       DataType = DbType.Int32, 
       IsNullable = false, 
       AutoIncrement = false, 
       IsForeignKey = false 
     }); 

     Columns.Add(new DatabaseColumn("SampName", this) 
     { 
       IsPrimaryKey = false, 
       DataType = DbType.AnsiString, 
       IsNullable = true, 
       AutoIncrement = false, 
       IsForeignKey = false 
     }); 

     Columns.Add(new DatabaseColumn("SampPurpose", this) 
     { 
       IsPrimaryKey = false, 
       DataType = DbType.AnsiString, 
       IsNullable = true, 
       AutoIncrement = false, 
       IsForeignKey = false 
     }); 

     Columns.Add(new DatabaseColumn("ActiveState", this) 
     { 
       IsPrimaryKey = false, 
       DataType = DbType.Int32, 
       IsNullable = false, 
       AutoIncrement = false, 
       IsForeignKey = false 
     }); 

我有一個WPF代碼隱藏的查詢,看起來像這樣:

SqlQuery sqlsql = new Select() 
    .From("SamplerData") 
    .Where("ActiveState") 
    .IsEqualTo(1); 
List<SamplerDatum> sampAll = sqlsql .ExecuteTypedList<SamplerDatum>(); 

設置爲顯示sqlsql值的斷點顯示如下:

{SELECT * FROM `SamplerData` WHERE ActiveState = @0} 

然後代碼與拋出:

{ 「類型 'System.Int64' 的對象不能被轉換爲類型 'System.Int32'」}

A 「找到」 在Visual Studio中沒」告訴我Int64轉換髮生在哪裏。據我所知,SQLite使用Int64作爲標識列,但不知道SubSonic爲什麼/如何在Structs使其成爲Int32時處理轉換。

幫助?

謝謝..

回答

4

我不知道很多關於亞音速,但SQLite的ADO.NET的客戶端使用的Int64所有整數列。不知道SubSonic,這只是一個猜測,但您可能需要將DbType.Int32列更改爲DbType.Int64。

最有可能的,查詢被實際執行罰款,但返回值(無類型的最初,在ADO.NET的方式)被拆箱到亞音速的一些數據結構 - 它認爲應該是32位整數的結構,根據您的DbType.Int32語句。你不能將一個longbox取消裝入一個int(即(int)(object)(long)0會拋出一個異常) - 所以你需要告訴SubSonic期望64位整數,因爲這是SQLite會給你的。

9

與我們最新發布的固定這一點 - SQLite.tt文件沒有正確地翻譯整數PK長(INT 64)。如果你在Github上獲取最新的數據,它應該被解決。確保你從模板項目中抓取。

+1

字樣。感謝Rob! – Snowy 2009-08-27 15:17:13