更新NHibernate中非规范化表的所有行

更新NHibernate中非规范化表的所有行,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,嘿,大家好,快速提问 在我当前的项目中,我们有一个非规范化的表,对于给定的唯一头记录,它将有一个或多个非规范化的行 当用户访问表示头部的POCO并执行更新时,我需要将此更改级联到所有非规范化行。例如,如果用户更改规范化标题中的字段“A”,我需要所有非规范化行现在反映字段“A”的新值 我目前的想法是只在属性集的规范化头中执行foreach,因为我已经有一个表示非规范化行的IList,但我希望有一个更优雅的解决方案,不需要为每个需要向下传播到非规范化表的规范化字段编写foreach循环 仅供参考,在

嘿,大家好,快速提问

在我当前的项目中,我们有一个非规范化的表,对于给定的唯一头记录,它将有一个或多个非规范化的行

当用户访问表示头部的POCO并执行更新时,我需要将此更改级联到所有非规范化行。例如,如果用户更改规范化标题中的字段“A”,我需要所有非规范化行现在反映字段“A”的新值

我目前的想法是只在属性集的规范化头中执行foreach,因为我已经有一个表示非规范化行的IList,但我希望有一个更优雅的解决方案,不需要为每个需要向下传播到非规范化表的规范化字段编写foreach循环

仅供参考,在纯存储过程中,我们只需在save存储过程中使用适当的where子句发出第二个update命令,但我们也试图摆脱存储过程依赖项,并在c中执行大多数操作#


TIA

感谢所有人提供上述答案。我按照建议查看了事件侦听器,对于我们试图完成的任务来说,它似乎有点太重了

由于我们使用的是存储库模式,目的是在模型中嵌入尽可能多的此类行为,因此我们最终将级联更新嵌入到header对象属性的setter中。因为这类级联可能很难测试,等等。它允许我们在POCO中测试模型中的所有内容,而不必依赖SQL触发器或NHibernate

简言之,当一个标题在其setter中更新时,我会对每个细节对象列表进行快速更新,并更新对象树中的任何其他非规范化POCO,然后使用简单的saveorupdate和nHibernate将其放入数据库


-Bob

考虑将表格标准化。我认为有很好的理由,至少因为它是遗留的,可能还有性能,我可以告诉你,当它被规范化时,处理它要容易得多。相信我,这是值得做大量工作的。实际上,这个特定对象有一个相关的denorm表是有一些非常具体的体系结构原因的,所以规范化确实不是一个选项。希望大量的循环也不是一个选项,因为这是在TSQL的几行中解决的情况之一。