假设我有和数据库表名为People,以及实体People。假设我需要一种快速方法来删除应用程序中随处可见的人员子集。因此,我将IsDeleted列添加到People表,并将该列中的值设置为1。
在Entity Framework中,有一种机制可以指定,对于在IsDeleted列中具有值的实体的实例,不应该获取设置为1,并且映射框架会自动过滤数据。用NHibernate可以实现吗?
答案 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" />