在NHibernate中映射级别上过滤实体

时间:2012-06-05 14:46:37

标签: nhibernate

假设我有和数据库表名为People,以及实体People。假设我需要一种快速方法来删除应用程序中随处可见的人员子集。因此,我将IsDeleted列添加到People表,并将该列中的值设置为1。

在Entity Framework中,有一种机制可以指定,对于在IsDeleted列中具有值的实体的实例,不应该获取设置为1,并且映射框架会自动过滤数据。用NHibernate可以实现吗?

3 个答案:

答案 0 :(得分:7)

您可以在class mapping中定义where属性。

  

其中 (可选)指定要使用的任意SQL WHERE条件   检索此类的对象时

<class ... where="IsDeleted = 0">

如果您正在使用Fluent NHibernate,那么只需在映射类中定义:

Where("IsDeleted = 0");
NH的代码映射应该类似于Fluent NHibernate的映射。

答案 1 :(得分:0)

您可以创建抽象类,例如PeopleBase,您的People课程将从中派生,并将您的实体映射到该课程 之后你可以使用这样的鉴别器(没有检查正确性,但它应该工作):

 <class name="YourNamespace.PeopleBase,YourNamespace" table="People">
   // ...
   <discriminator column="IsDeleted" type="boolean" /> 
   // Properties...
   // ...
   <subclass name="YourNamespace.People, YourNamespace" discriminator-value="false">
   </subclass>
</class>

答案 2 :(得分:0)

为了实现我想要的,我创建了基类+两个子类。这是配置:

  • discriminator-value 的子类:

    <subclass name="People" discriminator-value="null">
    </subclass>
    <subclass name="PeopleHistory" discriminator-value="not null">
        <property name="MasterRowId" />
    </subclass>
    
  • 基础中的鉴别器:

    <discriminator column="MasterRowId" />