Nhibernate流畅地忽略属性,同时用条件更新

时间:2017-05-22 08:44:16

标签: nhibernate fluent-nhibernate

如果值为null(在更新后的实体中),使用NHibernate,如何更新实体并忽略其某些属性? 如果属性值不为null,则应将其包含在更新中。

示例,实体具有DateInterval {#913 ▼ +"y": 0 +"m": 0 +"d": 0 +"h": 2 +"i": 15 +"s": 0 +"f": 0.0 +"weekday": 0 +"weekday_behavior": 0 +"first_last_day_of": 0 +"invert": 0 +"days": 0 +"special_type": 0 +"special_amount": 0 +"have_weekday_relative": 0 +"have_special_relative": 0 } Id

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

1 个答案:

答案 0 :(得分:1)

你需要做两件事:

  • 启用dynamic updates。默认情况下,NHibernate为每个实体准备一个更新查询,更新除主键之外的所有列。在更新实体时,它通过指定所有值(包括未更改的值)来使用它。因此,您需要告诉NHibernate使用动态更新,它会在每次更新时生成临时更新查询,以便仅更新已更改的属性。
    使用hbm,您必须将dynamic-update="true"放在类映射上。可能有一些足够的类映射方法可以流利地调用它。
  • 使用interceptorevent自定义肮脏检查算法。 Stack Overflow上有很多关于此问题的答案,例如this oneother one (from me) 它们不是关于你的要求,但适应它们应该不难。