首先,问题是有些奇怪。
我正在设计一个使用ASP.NET MVC,SQL-Server和NHibernate作为ORM的Web应用程序,在设计应用程序时我发现应用程序数据分为两部分(根据用户是男性还是女性)所以我有两个选项,当你选择其中一个时,所有应用程序数据将分为两个部分(基于性别过滤器)
那么,有没有办法根据这些过滤器设置一些“网”来过滤来自数据库的数据?喜欢性,位置或分支?如何使用这样的数据库级过滤器?在我的应用程序中无需使用“... WHERE SEX = 1”,数据库级别只有一个过滤器?
答案 0 :(得分:1)
类映射具有where属性。如果您使用它,则所有针对该类的查询都将包含您的where条件。
答案 1 :(得分:1)
NHibernate的功能被定义为18.1. NHibernate filters。
这是一个可以应用于class
或集合级别的设置。文件中的例子:
<class name="MyClass" ...>
...
// this way we are saying, retrieve instances which meet the criteria
<filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</class>
或者,到一个集合:
<set ...>
<filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</set>
在我们的实体/集合上设置此映射,我们可以在ISession级别应用过滤器:
session.EnableFilter("myFilter").SetParameter("myFilterParam", "some-value");
现在使用此设置过滤任何映射对象
以下是一些例子:
我发现这些过滤器用作集合是一个非常强大的功能。集合/词典可以包含一些“用户”相关数据(例如按位置,语言,角色等过滤)
另一种方法可能是添加过滤器以查询ala:.Add(ICriterion)
(条件查询)或.Where(expression)
(QueryOver)。这可以在包装DAL的AOP过滤器中完成。