Linq To Sql - 当另一个值更改时更新值

时间:2009-04-03 14:21:31

标签: c# .net asp.net linq linq-to-sql

使用Linq To Sql - 当一个值在另一个表中更改时,更新数据库中一个表的值的最佳方法是什么?

例如,在TableA中,有一个名为DateModified的列。 TableA与TableB有关联。现在,我希望每次记录在tableA中更改时以及每次在TableB中创建/更新/删除子记录时,将DateModified字段的值设置为当前日期。

如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

如果更改只在一条记录中,您可以使用On*Changed部分方法,也可以在数据上下文中覆盖SubmitChanges,调用GetChangeSet,然后申请更新之前的更改。后者(数据上下文)方法对于捕获广泛的变化非常有用,因为On*Changed方法对于特定于各个属性的逻辑非常有用。

但是,在提供的情况下(非同类更新),我希望数据库触发器可能更合适。

答案 1 :(得分:2)

您可以在OnCreated中的子实体上注册PropertyChanged事件处理程序(在部分类中实现),并让该处理程序更新父属性。如果您不关心已经加载的类进行更改,那么使用DBM触发器作为@Marc建议也是一种选择。

编辑:如果您还需要捕获删除,则可以为数据上下文实现delete partial方法,以调用相同的处理程序方法来更新要删除的实体的父级。

答案 2 :(得分:0)

通过StoredProcedure对TableB进行插入/更新/删除,允许您在TableA上执行更新或在TableB上具有更新TableA的插入/更新/删除触发器

我不会尝试在LINQ中完成此任务,因为它将涉及覆盖各种IDE生成的代码结构(维护噩梦)或额外调用数据库以获取相关的TableA项。