2012-07-19 62 views
2

我對SQL Server使用dapper,但在單元測試的內存測試中使用了Sqlite。sqlite和sqlserver與短小精悍

我有一個類如下

public class Test 
{ 
    public int ID {get;set;} 
    public string Name 
} 

如果我查詢使用短小精悍與SQL Server的連接,它工作正常。

如果我用SQLite連接查詢使用dapper,我得到一個類型轉換錯誤。基本上我需要將ID的類型改爲long,而不是int。

我不想在SQL Server中更改我的模式,所以我想知道是否有解決方案。我試着用隱式強制類型轉換爲long/int來創建ID類,但是這也失敗了,而且我的想法已經不存在了!

+0

你是如何定義sqlite表的? – 2012-07-19 16:19:50

回答

0

這是圍繞着這樣一個事實,即Dapper在IDataRecord接口上使用GetValue方法。 System.Data.SqlLite命名空間中的具體類可能映射值與System.Data.SqlClient的值不同。

As @FelicePollano指出,嘗試更改SQLLite表的結構並查看是否會導致System.Data.SqlLite中的具體類以不同的方式映射它。

另一種選擇是使用FastExpando對象滾動您自己的映射Dapper返回並強制它將該值轉換爲Int。

IEnumerable<dynamic> results = Conn.Query("Select ID from SomeTable"); 

var testValue = new Test 
{ 
    ID = Convert.ToInt32(Results[0].ID.ToString()) 
}; 

不是真的很喜歡它,因爲它可能需要很多代碼更改,但它可以工作。

請注意:如果ID列不是整數,則示例代碼可能會引發異常。您可以使用TryParse,但爲了簡潔起見,我沒有包含它。

相關問題