在表更新时,触发我的.NET代码中的操作

时间:2013-08-19 16:00:37

标签: c# sql-server vb.net sql-server-2008

我想知道这是否可行。当更新特定表中的值时,我们希望函数在我们的.NET代码中工作。这可以是记录插入或更新。这可能吗? 如果没有,是否有替代流程?

2 个答案:

答案 0 :(得分:9)

你需要问几个问题。

您是否希望在数据库级别上没有任何业务逻辑? 显然,db触发器可以执行此操作(在更改值时执行某些操作,即使仅非常特定的值)。

我见过一些db触发器重的系统。他们的“逻辑”深深地与数据库平台高度耦合。这有一些优点,但大多数人可能会说缺点太大(耦合,缺乏包容性/可重用性)。

根据您的工作和倾向,您可以:

  1. 确保所有DAO / BusinessFunctoin对象调用“事件”object.function,以便在发生特定值更改时执行所需操作。

  2. 使用触发器在发生特定值更改时调用“事件”object.function

  3. 您的触发器可以完成所有操作。

  4. 我个人倾向于选项2,你有一个最小的触发器(它只是触发你的object.function的事件调用)所以你不会将你的数据库深深地耦合到你的业务逻辑。

    选项1没问题,但可能有点麻烦,除非你有一套非常狭窄的BF / DAO与你想要观看的db table.field对话。

    选项3是最糟糕的选择,因为您将逻辑耦合到数据库并降低其对业务逻辑层的可访问性。

    鉴于此,以下是通过选项2实现此目的的一些信息:

    在MSDN中使用此示例:http://msdn.microsoft.com/en-us/library/938d9dz2.aspx

    这显示了如何在项目中运行触发器并调用CLR对象。

    实际上,在您的项目中,您创建了一个触发器并让它调用您的类。

    请注意以下行:[SqlTrigger(Name="UserNameAudit", Target="Users", Event="FOR INSERT")]

    这定义了代码触发的时间,然后在代码中,您可以检查约束,然后触发方法的其余部分(或不激活),或根据需要调用另一个object.method

    直接转到数据库和添加触发器之间的主要区别在于,您可以在部署时一起访问项目中的所有对象。

答案 1 :(得分:3)

我从未尝试过这个但是有可能。您可以编写 CLR程序集并从表触发器中调用它。

您可以看到示例here

你应该发布你的问题,你可能会找到更好的解决方法。