2016-03-27 24 views
0

我在c#coreclr上使用Dapper,Sqlite。如果第二次運行查詢時Dapper會拋出異常,如果結果模式不同

public async Task<UserPoco> GetFromEmail(string email) 
    { 
     email = email.ToLower(); 

     using (var connection = new SqliteConnection(_configSettings.ConnectionString)) 
     { 
      connection.Open(); 
      var query = $"SELECT * FROM users WHERE EmailAddress = '{email}';"; 
      var result = await connection.QueryAsync<UserPoco>(query); 
      return result.FirstOrDefault(); 
     } 
    } 

這種簡單的方法會拋出一個異常,如果某個時候SQL查詢找不到結果,並且下次運行它,它會找到結果。 它拋出: 無法投入類型'System.Int64'的對象鍵入'System.Int32'。 解析列0(UserId = 86 - Int64)時出錯

我很確定它與數據類型無關。 UserPoco有一個很長的UserId屬性,DB表用戶有一個類型爲INTEGER的UserId,推薦用於存儲bigint(long)。此外,例如,如果該方法總是找到數據,它將像魅力一樣工作。 我認爲是關係到精緻小巧的緩存運行每個查詢的結果模式,並拋出時相同的查詢此架構的變化,因爲他們指出,在異常的事實: https://github.com/janjosephlim/dapper-dot-net/issues/124

我不明白是如何來我無法找到更多關於這個或更多人的信息抱怨這種常見的情況:我只是多次運行一個非常簡單的查詢,可以帶回或不帶結果。

我缺少什麼?

回答

0

我不知道爲什麼sqlite會錯誤報告數據類型,但是:在最近的預發佈版本中數據類型檢查得到了改進。請檢查最新的預發佈版本:我預計它已經修復。

相關問題