我编写了一个使用 LINQ to NHibernate 进行数据库查询的应用程序。我的领域层中的代码创建类型的表达式
System.Linq.Expressions.Expression<Func<T, bool>>
这些被传递到我的数据访问层中的存储库,然后像这样使用它们:
return session.Query<T>.Where(expression)...
在我发现 NHibernate LINQ 提供程序完全忽略映射文件中的选项 fetch="join" 之前,这一切都很棒,这意味着使用多个选择语句而不是使用连接的单个选择来获取对象。
所以我试图转移到完全支持连接的 QueryOver API。我立即遇到了不支持 string.Equals 之类的方法的问题。我还有几个在我的表达式中使用的自定义扩展方法,为此我通过扩展 BaseHqlGeneratorForMethod 在 LINQ to NHibernate 中添加了支持。
如何在 QueryOver API 中添加对这些方法的支持?我找不到这方面的任何信息。
我知道你可以做这样的事情:
Session.QueryOver<T>().WhereRestrictionOn(x=>x.Foo).IsInsensitiveLike("bar")
但我正在寻找一种方法来使用与 LINQ to NHibernate 相同的表达式来完成所有操作。