Oracle db をモックするメモリ内の sqlite db から数行を返すのにかなりの時間を費やしています。Null 可能な DateTime で行をプルアップする NHibernate クエリを作成しています。私はそれを正しくマッピングしたと思います。見てください:
データ オブジェクト プロパティ:
public virtual System.Nullable<System.DateTime> RequiredInstallDt { get; set; }
マッピング:
Map(x => x.RequiredInstallDt).Column("REQUIRED_INSTALL_DT").Nullable();
データベースには 2 つの行があります。引き上げるべきものとそうでないもの。私が求めている日付は2012-8-1です。時間の値はなく、データベースにもありません。これは確認できました。1 つの行には 8 月 1 日があり、もう 1 つの行にはありません。1 つのレコードが返されることを期待しています。
私が言うなら:
IList<Request> ra = new RequestDAO().ListAll();
これは、クエリと同じ呼び出しで既知の作業メソッドであり、期待どおりに 2 つのレコードを取得します。
linq、hql、および CreateCriteria バージョンを使用して、同じクエリのいくつかのバージョンを試しました。結果はほぼ常に同じです。0 レコードが返されます (別の方法は NHibernate.Hql.Ast.ANTLR.QuerySyntaxException なので、PEBKAC です)。これらのクエリ バージョンの 1 つを次に示します。
DateTime installDate = new DateTime(2012, 8, 1);
var requests = session.CreateCriteria<Request>()
.Add(Restrictions.Ge("RequiredInstallDt", installDate))
.Add(Restrictions.Lt("RequiredInstallDt", installDate.AddDays(1)))
.List<Request>();
読んでくれてありがとう..ご意見ありがとうございます。