NHibernate - 定义条件

时间:2011-01-09 12:44:02

标签: nhibernate hql nhibernate.search nhibernate-criteria

在我的应用程序中,用户可以定义搜索条件。他可以选择一个列,设置一个运算符(等于,大于,小于或等于等)并给出值。用户单击按钮后,应用程序应使用条件搜索数据库。我使用NHibernate并且现在问我,用NHibernate做这个的效率最高的方法是什么。

我应该用它创建一个查询(Column = Name,Operator = Like,Value =%John%)

        var a = session.CreateCriteria<Customer>();
        a.Add(Restrictions.Like("Name", "%John%"));
        return a.List<Customer>();

或者我应该用HQL做到这一点:

        var q = session.CreateQuery("from Customer where " + where);
        return q.List<Customer >();

或者是否有更好的解决方案?

感谢您的帮助。

最诚挚的问候,托马斯

2 个答案:

答案 0 :(得分:0)

就效率而言,没有区别。在HQL版本中,我更喜欢使用参数而不是将where部分添加为字符串。 如果您使用的是NH3.0,您也可以考虑使用QueryOver,以避免使用字符串来描述您的属性

答案 1 :(得分:0)

您可以使用其中任何一个。两者之间可能几乎没有差异。但无论你做什么,都要确保你的列名是常量或映射到列名,否则你的存储库将紧密耦合到你的模型定义,即如果你更新列名,你必须自己更新这些语句。

当你构建where子句时,你有一个附加正确查询的函数。你可能会有一个switch case语句。