2016-03-27 1 views
0

私はDapper、SqliteをC#coreclrで使用しています。異なる結果スキーマがある場合、クエリを2回実行すると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(); 
     } 
    } 

この単純な方法では、ある時点で結果が見つからず、次回に結果が見つかると例外がスローされます。 throwされるもの: タイプ 'System.Int64'のオブジェクトをキャストして 'System.Int32'と入力できません。 カラム0の解析エラー(UserId = 86 - Int64)

私はそれがデータ型に関係していないと確信しています。 UserPocoには長いUserIdプロパティがあり、DBテーブルのユーザーにはbigint(long)を格納するのに推奨されるINTEGER型のUserIdがあります。さらに、メソッドが常にデータを見つけた場合など、それは魅力的に機能します。 https://github.com/janjosephlim/dapper-dot-net/issues/124

すると、私は理解していないもの: 私はDapperのは、それが実行するすべてのクエリの結果のスキーマをキャッシュし、同じクエリのために、このスキーマの変更は、彼らが上で指摘のように例外をスローするという事実に関係していると思いますか私がこれ以上の情報を見つけることができないのは、このような一般的なシナリオについて不平を言う人が増えているということです。私は単純なクエリを複数回実行しています。

私には何が欠けていますか?

答えて

0

なぜsqliteがデータ型を誤って報告しているのか分かりませんが、最近のプレリリースビルドでデータ型チェックが改善されました。最新のプレリリースビルドを確認してください:それはすでに修正されていると思います。

関連する問題