gpt4 book ai didi

c# - 如何保留 Db Context 和 Restore 的更改跟踪信息?

转载 作者:行者123 更新时间:2023-11-30 20:15:15 25 4
gpt4 key购买 nike

We have to detect changes inside DB Context and schedule the DB update at a later date.

如何坚持change tracker info of Db Context到临时数据库中,以便日后可以将这些恢复到另一个 DbContext 实例中。

So merely .SaveChanges on newly built Db Context instance should commit the pending changes.

最佳答案

也许您需要做的就是拥有一个与您的主(远程)数据库具有相同结构的本地临时数据库;然后将 SaveChanges 保存到本地数据库而不是主数据库中。

要将 SaveChanges 指向本地数据库而不是主数据库,您只需在创建 DbContext 时使用不同的连接字符串即可。 (虽然已经有一些关于能够更改 DbContext 上的连接的讨论,但目前尚未实现,请参阅 https://github.com/aspnet/EntityFrameworkCore/issues/8494。)。

所以...假设您的更改在“主”DbContext 中,然后您为本地数据库创建第二个 DbContext,并将更改从“主”DbContext.ChangeTracker 复制到“本地”DbContext。变化追踪器。您可以通过遍历 ChangeTracker 条目来做到这一点,并且:将实体附加到“本地”DbContext;然后应用更改(使用 EntityEntry.CurrentValues 获取当前值,测试 !EqualityComparer.Default.Equals,如果不相等,则再次使用 PropertyInfo.SetValue 应用当前值)。

如果您只需要一个浅拷贝,这非常简单;如果您需要深拷贝,那么您还需要浏览模型中的关系。

作为所有这些的替代方案,一种不同的方法是始终将所有内容保存到本地数据库,然后有一个单独的过程,例如将值复制到主数据库的批处理过程。作为一般性评论,无论您如何执行此操作,您都需要处理在将本地值发送到主数据库时可能出现的任何并发冲突。

史蒂夫

附言也可能值得尝试使用 DbContext.Database 来查看是否可以重定向连接——如果您愿意超出“支持的”API。

关于c# - 如何保留 Db Context 和 Restore 的更改跟踪信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55964146/

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