【问题标题】:how to assign data layer-level filters如何分配数据层级过滤器
【发布时间】:2014-01-05 12:54:46
【问题描述】:

首先,问题是有些奇怪。

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

那么,有没有什么办法可以放置一些“网络”来根据这些过滤器过滤来自数据库的数据?比如性别、位置或分支?如何使用这样的数据库级过滤器?并且不需要在我的应用程序中到处使用“... WHERE SEX=1”,数据库级别只有一个过滤器?

【问题讨论】:

    标签: asp.net-mvc database nhibernate


    【解决方案1】:

    NHibernate 有一个功能描述为18.1. NHibernate filters

    这是一个可以应用于classcollection 级别的设置。文档中的示例:

    <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");
    

    现在使用此设置过滤任何映射的对象

    这里有一些例子:

    我发现这些用于收藏的过滤器是一个非常强大的功能。集合/字典可以包含一些“用户”相关数据(例如按位置、语言、角色等过滤)

    另一种方法可能只是将过滤器添加到查询中:.Add(ICriterion)(Criteria query).Where(expression)(QueryOver)。这可以在包装 DAL 的 AOP 过滤器中完成。

    【讨论】:

    • 如果有帮助就太好了;) 享受 NHibernate,令人惊叹的工具
    【解决方案2】:

    类映射具有 where 属性。如果您使用它,所有针对该类的查询都将包含您的 where 条件。

    【讨论】:

    • 您使用的是哪种映射? Fluent,xml,按代码映射还是按属性映射?
    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2014-02-17
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多