如何分配数据层级过滤器

时间:2014-01-05 12:54:46

标签: asp.net-mvc database nhibernate

首先,问题是有些奇怪。

我正在设计一个使用ASP.NET MVC,SQL-Server和NHibernate作为ORM的Web应用程序,在设计应用程序时我发现应用程序数据分为两部分(根据用户是男性还是女性)所以我有两个选项,当你选择其中一个时,所有应用程序数据将分为两个部分(基于性别过滤器)

那么,有没有办法根据这些过滤器设置一些“网”来过滤来自数据库的数据?喜欢性,位置或分支?如何使用这样的数据库级过滤器?在我的应用程序中无需使用“... WHERE SEX = 1”,数据库级别只有一个过滤器?

2 个答案:

答案 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过滤器中完成。