これに関して問題を提起する必要があるかどうかわからないので、最初にこれに対する簡単な回避策を誰かが知っているかどうか尋ねようと思いました. MS Access 2003 (Jet.4.0) と組み合わせて使用する場合、OleDbConnection で Dapper を使用しようとするとエラーが発生します (データベースの選択ではありません!)
以下のテスト コードを実行すると、「OleDbException : 基準式のデータ型が一致しません」という例外が発生します。
var count = 0;
using (var conn = new OleDbConnection(connString)) {
conn.Open();
var qry = conn.Query<TestTable>("select * from testtable where CreatedOn <= @CreatedOn;", new { CreatedOn = DateTime.Now });
count = qry.Count();
}
OleDb の日付に関する過去の経験から、DbType を Date に設定すると、内部で OleDbType プロパティの値が OleDbType.Date ではなく OleDbTimeStamp に変更されると思います。これは Dapper のせいではないことは理解していますが、OleDbParameter クラスで内部的にリンクする奇妙な方法と見なされる可能性があるのは
他の ORM、未加工の ADO、または独自のファクトリ オブジェクトを使用してこれに対処する場合、コマンドを実行する直前にコマンド オブジェクトをクリーンアップし、OleDbType を Date に変更します。
コマンドオブジェクトが内部にあるように見えるため、私が見る限り、これはDapperでは不可能です。残念ながら、私は動的生成のことを学ぶ時間がなかったので、簡単なことを見落としていたり、単に問題を提起するのではなく、修正を提案して貢献したりする可能性があります。
何かご意見は?
リー