假设我有一个名为 People 的数据库表和实体 People。假设我需要一种快速的方法来从应用程序中随处显示的人中删除一部分人。所以我将 IsDeleted 列添加到 People 表中,并将该列中的值设置为 1。
在实体框架中,有一种机制指定不应获取列 IsDeleted 中的值设置为 1 的实体实例,并且映射框架会自动过滤数据。有可能用 NHibernate 实现吗?
假设我有一个名为 People 的数据库表和实体 People。假设我需要一种快速的方法来从应用程序中随处显示的人中删除一部分人。所以我将 IsDeleted 列添加到 People 表中,并将该列中的值设置为 1。
在实体框架中,有一种机制指定不应获取列 IsDeleted 中的值设置为 1 的实体实例,并且映射框架会自动过滤数据。有可能用 NHibernate 实现吗?
您可以在类映射中定义where
属性。
where(可选)指定检索此类的对象时要使用的任意 SQL WHERE 条件
<class ... where="IsDeleted = 0">
如果您使用的是 Fluent NHibernate,那么只需在映射类中定义它:
Where("IsDeleted = 0");
NH 的代码映射应该类似于 Fluent NHibernate 的映射。
为了实现我想要的,我创建了基类 + 两个子类。这是配置:
具有discriminator-value 的子类:
<subclass name="People" discriminator-value="null">
</subclass>
<subclass name="PeopleHistory" discriminator-value="not null">
<property name="MasterRowId" />
</subclass>
基类中的鉴别器:
<discriminator column="MasterRowId" />
您可以创建抽象类,例如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>