使用Linq To Sql - 当一个值在另一个表中更改时,更新数据库中一个表的值的最佳方法是什么?
例如,在TableA中,有一个名为DateModified的列。 TableA与TableB有关联。现在,我希望每次记录在tableA中更改时以及每次在TableB中创建/更新/删除子记录时,将DateModified字段的值设置为当前日期。
如何实现这一目标?
答案 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项。