gpt4 book ai didi

c# - 使用 LINQ-to-SQL 时透明地记录对象更改的最佳方法是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:11:42 25 4
gpt4 key购买 nike

我会跟踪对对象所做的所有更改,以便用户可以查看回滚任何项目的任何先前版本在数据库中。

历史 数据库表如下所示:

Item     | ItemId | Field     | WhenChanged         | OldValue | NewValue
customer | 6 | LastName | 2009-12-31 13:00:04 | Sanders | Sanders-Smith
customer | 5 | FirstName | 2009-12-31 12:11:14 | Jym | Jim

目前,每当用户填写表单时,我都会记录这些更改,因此我拥有对象的新旧状态的完整信息。

但是,现在我需要通过代码 提供此历史数据记录。当使用 LINQ-to-SQL 时,它需要透明地 工作,即开发人员不必做任何额外的工作,即下面的代码应该导致写入还有历史表:

using (var db = Datasource.GetContext())
{
var customers = from c in db.Customers
where c.Status == "waiting"
select c;
foreach(var customer in customers)
{
customer.Status = "finished";
}
}
db.SubmitChanges();

我可以想象我可以通过两种方式实现这一目标:

  1. 重写 db.SubmitChanges() 但问题是我如何访问正在等待更改的对象。
  2. 将我的日志记录方法附加到 OnSubmitChanges 事件,但我还没有找到解决方案

有没有人解决过这个问题或知道解决它的好方法?

最佳答案

对于您的第一个问题,您可以使用 db.GetChangeSet() 访问等待更改的对象,并了解哪些字段已更改以及原始值是多少,您可以使用:

ITable table = db.GetTable(entity.GetType());
ModifiedMemberInfo[] modifiedMembers = table.GetModifiedMembers(entity);
object original = table.GetOriginalEntityState(entity);

关于c# - 使用 LINQ-to-SQL 时透明地记录对象更改的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1914625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com