sqliteとsqlserverとdapper

dapper sql-server system.data.sqlite unit-testing

質問

私はSQL Serverでdapperを使用していますが、私の単体テストのメモリテストではSqliteを使っています。

私は次のようなクラスを持っています

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

SQL Server接続でdapperを使用してクエリを実行すると、正常に動作します。

SQLite接続でdapperを使用してクエリを実行すると、型キャストエラーが発生します。基本的には、int型ではなくlong型になるようにIDの型を変更する必要があります。

SQL Serverでスキーマを変更したくないので、シナリオの回避策があるかどうか疑問に思っています。私は暗黙的にlong / intにキャストしてIDクラスを作成しようとしましたが、これも失敗し、アイデアがありません!

人気のある回答

これは、DapperがIDataRecordインターフェイスでGetValueメソッドを使用するという事実を中心に展開されています。 System.Data.SqlLite名前空間の具象クラスは、おそらくSystem.Data.SqlClientの値と異なる値をマップします。

@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を使うことができますが、簡潔にするために私はそれを含めませんでした。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow