0

我在数据库中触发器丰富的遗留系统上。

因此,我在 Fluent NHB 中映射了一个实体,我想在该实体上强制执行只能执行更新和选择,因为另一个表上有一个触发器,该触发器执行对该表的插入。

简而言之,我想确保无法使用该实体进行插入。

沿着 .Not.Insert() 行的东西,但对于实体而不是列。

注意:对于这样的事情,触发器通常是一个不好的选择,但由于复杂性,我还没有删除触发器的选项。

这可以用 Fluent NHB 完成吗?

4

1 回答 1

2

我认为没有一种简单(“设计”)的方法可以做到这一点,但我可以想到以下可能的选择:

自定义 IEntityPersister (IClassPersister)。从默认持久化器派生,然后重写 Insert() 方法以抛出 NotSupportedException。必须在映射中配置(不确定这一步是否可以通过 FluentNH 完成): http: //nhibernate.info/doc/nh/en/index.html#mapping-declaration-class

或者实现一个合适的 NHibernate 事件监听器,它可以检测多个表的 INSERT 语句,并通过抛出来防止这些。

或者让你的域类对 Id 属性具有私有/受保护的设置器,然后使用映射告诉 NHibernate 应该使用“分配”的 id 生成器。NHibernate 现在不能插入此类对象,除非应用程序设置了 Id,因为它是受保护的(有点......),所以这永远不会发生。

于 2013-01-14T18:49:19.783 回答