NHibernate - 仅更新在运行时识别的指定对象属性

Posted

技术标签:

【中文标题】NHibernate - 仅更新在运行时识别的指定对象属性【英文标题】:NHibernate - Updating only specified object properties identified at runtime 【发布时间】:2011-11-09 08:56:26 【问题描述】:

我正在尝试在 ASP.NET MVC 3 应用程序中实现一个非常精细的安全模块,其中只有某些用户可以编辑表中记录的某些列。我可以想象更新 SQL 语句的列列表将只包含用户有权更改的列。问题是,我打算使用像 NHibernate 这样的 ORM。我想知道 NHibernate 是否提供了一种方法来在运行时确定模型的哪些属性应该是更新的一部分。或者是我唯一的选择,在 POST 方法上,再次从数据库中获取模型,只设置允许用户设置的属性,然后最后保存模型。另外,这是处理我对细粒度安全性要求的好方法吗?

【问题讨论】:

【参考方案1】:

动态更新和动态插入就够了吗?

dynamic-update(可选,默认为 false):指定 UPDATE SQL 应该在运行时生成,并且只包含那些值已经改变的列。

dynamic-insert(可选,默认为 false):指定 INSERT SQL 应该在运行时生成,并且只包含值不为 null 的列。

否则可能会使用事件或拦截器,但我从未使用过它们,所以我不太清楚。

【讨论】:

我想我不明白如何通过设置 dynamic-update=true 来设置哪些字段将成为运行时更新的一部分。你介意解释一下吗? @enamrik 如果您的应用程序确保仅更改用户有权更改的属性,则 NHibernate 将仅更改更新语句中的这些列。 谢谢,我想通了,但还没有时间结束这个问题。再次感谢您的帮助。

以上是关于NHibernate - 仅更新在运行时识别的指定对象属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在nHibernate中运行更新HQL查询?

NHibernate 预选?

NHibernate 事务和竞争条件

在不加入的情况下运行 NHibernate 查询

NHibernate 3 LINQ:如何过滤 IQueryable 以仅选择 T 类及其子类的对象?

NHibernate Oracle - 事务提交问题