如何在Linq-to-SQL类上捕获Save或Load事件?

时间:2009-04-30 09:57:22

标签: c# linq linq-to-sql

我有一个Linq-to-SQL类,我想在将记录持久保存到数据库之前执行一些预先保存验证。此外,一旦保存,我想要一些保存后的处理代码。

同样,当删除记录时,我想要调用前后方法,无论context.SubmitChanges()调用的位置如何。

我没有在生成的代码中看到任何可以覆盖的方法。部分方法OnValidate()可能足以进行预处理,但我希望能够在不满足某些条件的情况下取消保存,并且我没有看到任何钩子进行后处理。

我错过了什么吗?或者你能推荐另一种达到预期效果的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:7)

对于插入:

  1. 为您的实体创建基类。

  2. 添加一些虚拟方法。

  3. 覆盖DataContext.SubmitChanges

  4. 调用DataContext.GetChangeSet()并迭代应用您之前定义的函数的插入。

  5. 要恢复更改,请查看我的extension method

答案 1 :(得分:4)

好吧,抛出一个异常会有效地取消这个变化......但也许有点苛刻。

另一个扩展点是覆盖数据上下文中的SubmitChanges,以获取挂起的更改(GetChangeSet),执行任何最终更改(可能是审计),然后调用{{ 1}}。您可以在之后放置任何保存后的操作(使用您在保存之前获得的更改集)。