Nhibernate 流利地忽略属性,同时使用条件进行更新


如何使用

NHibernate 更新实体并忽略其某些属性,以防它们的值为 null(在更新的实体中(?
如果属性值不为 null,则应将其包含在更新中。

例如,对于具有IdName的实体:

  • 如果名称为 null,我们将更新没有该名称的实体。
  • 如果名称不为 null,我们将使用该名称更新实体。

为此,您需要两件事:

  • 启用动态更新。默认情况下,NHibernate 为每个实体准备更新查询,更新除主键之外的所有列。更新实体时,它通过指定所有值(包括未更改的值(来使用它。因此,您需要告诉 NHibernate 使用动态更新,在每次更新时,它会生成一个临时更新查询,以便仅更新更改的属性。
    使用 hbm,您必须在类映射上放置dynamic-update="true"。可能有一些适当的类映射方法来流利地调用它。
  • 使用拦截器或事件自定义脏污检查算法。在Stack Overflow上有一堆关于这个问题的答案,比如这个和另一个(来自我(。
    它们与您的要求无关,但适应它们应该不难。

最新更新