2009-08-26 17 views
3

これは別の場所で扱われていると思ったが、今は見ていない。とにかく、簡単なv3クエリーに問題があります。 SQLite ADO.NETプロバイダ1.0.65.0の使用。私のテーブルの構造は次のようになります。SQLite Int64とInt32の問題とサブソニックActiveRecord

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

マイStructs1.csファイルはそれでこれを持っている:

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

 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の分離コードでクエリを持っています

sqlsqlの値を表示するように設定されたブレークポイントは、これを示します。

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

そしてコードはでスロー:

{ "タイプのオブジェクトのSystem.Int64 ' 'は可能System.Int32' を型に変換できない。"}

をVisual Studioで "検索" が」なかったのInt64変換がどこで起こっているかを私に見せてください。私は、SQLiteがID列にInt64を使用することを理解していますが、StructsがInt32をInt32に変換しているときにSubSonicが変換を処理している理由/理由はわかりません。

ヘルプ?

おかげ..

答えて

4

私は亜音速について多くを知らないが、sqliteのためのADO.NETクライアントは、すべての整数の列のint64型を使用しています。 SubSonicを知らなければ、これは単なる推測ですが、DbType.Int32列をDbType.Int64に変更したい場合があります。

ほとんどの場合、クエリは実際には正常に実行されていますが、戻り値(初期化されていないADO.NETファクト)はいくつかのSubSonicデータ構造にアンボックスされています。 DbType.Int32ステートメントunbox a longをintに変換することはできません(つまり、(int)(object)(long)0が例外をスローします).64ビットの整数を期待する必要があるため、SubiteonicにはSQLiteが与えるものなので、これを伝える必要があります。

9

最新のリリースでこれを修正しました.SQLite.ttファイルは整数PKをlong(int 64)に正しく変換しませんでした。あなたがGithubで最新のビットをつかむなら、それは解決されるべきです。テンプレートプロジェクトを確実に取得してください。

+1

Word up。おかげでロブ! – Snowy