私はこのコンパイルされたクエリを持っています:
private static Func<DBContext, Foo> FooQuery = CompiledQuery.Compile<DBContext, Foo>(
_db => _db.FooTable.SingleOrDefault(f => f.DeletionDate == null || f.DeletionDate > DateTime.UtcNow)
);
一度実行すると、予想される Foo オブジェクトが返されます。
しかし、そのオブジェクトの DeletionDate が db に設定された後でも、同じオブジェクトが返されます - 私は null を期待しています。(アプリ プールをリサイクルした後、予想どおり null を返します。)
何らかの理由で、代わりに次のコンパイル済みクエリを使用すると (そして DateTime.UtcNow を渡すと) 機能しますが、その理由はわかりません。
private static Func<DBContext, DateTime, Foo> FooQuery = CompiledQuery.Compile<DBContext, DateTime, Foo>(
(_db, now) => _db.FooTable.SingleOrDefault(f => f.DeletionDate == null || f.DeletionDate > now)
);