我在遗留系统中,数据库中有丰富的触发器。
因此,我在Fluent NHB中映射了一个实体,我希望在该实体上强制执行只能执行更新和选择,因为在另一个表上执行插入操作会触发此表。
简而言之,我想确保无法使用此实体进行插入。
沿线的东西.Not.Insert(),但是对于实体而不是列。
注意:对于像这样的东西,触发器通常是一个糟糕的选择,但由于复杂性,我还没有选择删除触发器。
这可以用Fluent NHB完成吗?
答案 0 :(得分:2)
我认为没有一种简单的(“设计”)方式,但我可以想到以下潜在的选择:
自定义IEntityPersister(IClassPersister)。从默认持久性派生,然后重写Insert()方法以抛出NotSupportedException。必须在映射中配置(不确定此步骤是否可以通过FluentNH完成): http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-class
或者实现一个合适的NHibernate事件监听器,它可以检测许多表的INSERT语句,并通过抛出来防止这些。
或者让您的域类具有Id属性的私有/受保护的setter,然后使用映射告诉NHibernate应该使用“已分配”的id生成器。 NHibernate现在不能插入这样的对象,除非应用程序设置了Id,它应该永远不会发生,因为它受到保护(有点......)。