【问题标题】:Filter entities on mapping level in NHibernate在 NHibernate 中的映射级别过滤实体
【发布时间】:2012-06-14 21:16:51
【问题描述】:

假设我有一个名为 People 的数据库表和实体 People。假设我需要一种快速的方法来从应用程序中随处显示的人中删除一部分人。所以我将 IsDeleted 列添加到 People 表中,并将该列中的值设置为 1。

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

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

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

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

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

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

    Where("IsDeleted = 0");
    

    NH 的代码映射应该类似于 Fluent NHibernate 的映射。

    【讨论】:

      【解决方案2】:

      您可以创建抽象类,例如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>
      

      【讨论】:

        【解决方案3】:

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

        • 具有鉴别器值的子类:

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

          <discriminator column="MasterRowId" />
          

        【讨论】:

          猜你喜欢
          • 2011-07-07
          • 2011-09-28
          • 1970-01-01
          • 1970-01-01
          • 2013-03-26
          • 2015-06-20
          • 2013-05-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多