我有一个Linq-to-SQL类,我想在将记录持久保存到数据库之前执行一些预先保存验证。此外,一旦保存,我想要一些保存后的处理代码。
同样,当删除记录时,我想要调用前后方法,无论context.SubmitChanges()
调用的位置如何。
我没有在生成的代码中看到任何可以覆盖的方法。部分方法OnValidate()
可能足以进行预处理,但我希望能够在不满足某些条件的情况下取消保存,并且我没有看到任何钩子进行后处理。
我错过了什么吗?或者你能推荐另一种达到预期效果的方法吗?
谢谢!
答案 0 :(得分:7)
对于插入:
为您的实体创建基类。
添加一些虚拟方法。
覆盖DataContext.SubmitChanges
。
调用DataContext.GetChangeSet()
并迭代应用您之前定义的函数的插入。
要恢复更改,请查看我的extension method。
答案 1 :(得分:4)
好吧,抛出一个异常会有效地取消这个变化......但也许有点苛刻。
另一个扩展点是覆盖数据上下文中的SubmitChanges
,以获取挂起的更改(GetChangeSet
),执行任何最终更改(可能是审计),然后调用{{ 1}}。您可以在之后放置任何保存后的操作(使用您在保存之前获得的更改集)。