【问题标题】:NHibernate- Prevent deletion on a particular entity (i.e. make read-only)NHibernate-防止删除特定实体(即只读)
【发布时间】:2009-10-01 14:14:21
【问题描述】:

如何防止 NHibernate 删除特定类的单个实体? 我目前使用的一种编程方式需要检查实体的唯一字段“名称”。

这是场景:我有一个人和一个小组。该组可以有人员和其他组。如果尝试删除名为“Admins”的组,则不会,因为我强制执行事务级约束(特别是检查组的“名称”列/字段,因为这是唯一的)。所以没关系。

但现在我在想,如果创建了另一个组并且“管理员”成为该组的子组,则检查将失败。这将意味着删除“管理员”。所以我正在寻找一种更好的方法,而不是遍历父/子包含树,例如使用 NHibernate

我不能使用类范围的限制,例如“class Mutable=false”,我的意思是对某个类的一个或两个单独实体具有只读限制。

问候,

_NT

【问题讨论】:

    标签: c# database nhibernate parent-child readonly


    【解决方案1】:

    您可以编写自己的 IPreDeleteEventListener 实现并挂钩到 nhibernate 的事件系统,以编程方式停止并删除实体。

    This 是一个使用监听器的例子。

    【讨论】:

    • 但这需要手动检查很多东西。有没有 NHibernate-y 方法可以做到这一点?
    • 对不起,我无法为您的案例提供更好的建议。让我这样说吧。 “手动检查很多东西”都是关于域复杂性的。 ORM 对此无能为力。这里没有冒犯,但现在可能是重新考虑域对象设计的时候了,如果还不算太晚的话。
    • 为什么要重新思考域对象设计?我只需要以可能的最佳方式将几个实体设为只读 - 比执行 if 和 else 更好的方式,如果存在的话......因此我的问题。
    • “成为父/子关系中的孩子”这导致我遇到域对象设计问题。对不起,如果我误解了你的情况。那么您是在谈论诸如 ORM 级别的外键检查之类的东西吗?这在新罕布什尔州不存在。
    • 我个人的做法是在服务层做这种检查,而不是在数据访问层。回到你的问题。不。在这种情况下,不应该有任何配置/映射来帮助您。而且我认为任何其他 ORM 都无法帮助它。
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多