在表更新时,在我的.NET代码中触发一个操作
本文关键字:操作 一个 更新 NET 我的 代码 | 更新日期: 2023-09-27 18:28:09
我想知道这是否可能。当更新特定表中的值时,我们希望函数在.NET代码中工作。这可能是在插入或更新记录时。这可能吗?如果没有,是否有其他流程?
您需要问几个问题。
您是否希望在数据库级别使用任何业务逻辑?显然,db触发器可以做到这一点(在值更改时执行一些操作,即使只是非常特定的值)。
我见过一些数据库触发量很大的系统。他们的"逻辑"与数据库平台高度耦合。这有一些优点,但大多数人可能会说缺点太大(耦合、缺乏封装/可重用性)。
根据你正在做的事情和你的倾向,你可以:
-
确保所有DAO/BusinessFunctoin对象在发生特定值更改时调用"event"
object.function
以执行您想要的操作。 -
当某个值发生更改时,使用触发器调用"事件"
object.function
。 -
你的扳机可以做任何事情。
我个人倾向于选项2,在选项2中,您有一个最小的触发器(只需向object.function
触发事件调用),这样您就不会将数据库与业务逻辑深度耦合。
选项1很好,但可能会有点麻烦,除非你有一组非常窄的BF/DAO与你想要观看的这个db表.field对话。
选项3是imho最糟糕的选择,因为您将逻辑耦合到数据库,并降低其对业务逻辑层的可访问性。
鉴于此,以下是通过选项2实现这一目标的一些信息:
使用MSDN中的此示例:http://msdn.microsoft.com/en-us/library/938d9dz2.aspx.
这展示了如何在项目中运行触发器并调用CLR对象。
实际上,在您的项目中,您创建了一个触发器,并让它调用您的类。
注意行:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]
这定义了代码何时激发,然后在代码中,您可以检查约束,然后激发(或不激发)方法的其余部分,或者根据需要调用另一个object.method
。
直接转到数据库和添加触发器之间的主要区别在于,当一起部署时,可以访问项目中的所有对象。
我从未尝试过,但这是可能的。您可以编写CLR程序集并从表触发器中调用它。
你可以在这里看到一个例子。
但是你应该公布你的问题,你可能会找到更好的解决方案。