繁体   English   中英

分组更改以保存在Entity Framework Core中

[英]Grouping changes to save in Entity Framework Core

我正在运行一个过程,该过程将影响用户的数据库中的许多记录。 我只想应用所有更改,也可以不应用任何更改,具体取决于所有更改的结果。 (例如,如果子流程之一失败,则总体上不应进行任何更改)。 我还想将通知保存到数据库中,以向用户提醒过程的结果(例如,如果子过程失败,则会引发通知,使用户知道由于x原因未进行任何更改)。

我认为最好的方法是在添加变更跟踪器时分离所有条目,然后在成功或失败的情况下创建通知并保存更改,然后在应用所有更改时进行迭代通过更改跟踪器并重置Entity State并再次保存更改。

这种方法所面临的问题是,当重置Entity State ,我不知道该实体是Added还是Modified 我可以实现自己的变更跟踪器来存储实体的先前状态,但这会使EF的变更跟踪器变得多余。

我也只能在保存实体时添加所有实体的权利,但这将需要沿着嵌套方法的链链接向下传递许多对象,直到最后。

有没有人有更好的建议,还是使用上述提到的技巧之一解决此问题是标准做法?

听起来您正在尝试实现工作单元模式。 EntityFramework的DbContext使此操作相当容易使用,因为DbContext本身就是工作单元。

只需实例化一个新的上下文并进行所需的更改。 您可以将上下文传递给进行更改的任何函数。 完成“逻辑单元”操作后,调用SaveChanges 只要单个方法不调用SaveChanges ,您就可以将它们组合到一个单元中,并在完成整个逻辑操作后提交。 一切将在单个事务内自动提交。 数据不会保持不一致状态。

您告诉了交易。 使用事务还是SaveChanges(false)和AcceptAllChanges()?

您也可以在DB中实现数据版本。 对我而言,这将是更轻松,更正确的方式(您必须始终仅插入数据,而永不更新。一对多)。 在这种情况下,您可以删除最后的记录或将其标记为无效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM