如何在单个事务中执行多个EF Core保存更改在不同服务中的更改?

在我的应用程序中,我有一个Constraints/LocationTypesToInclude处理程序,该处理程序有一个DBContext和2个通过DI注入的服务。每个服务都有自己的DBContext,它们也通过DI注入。

  

我是否可以在单个EF Core事务中执行在处理程序和服务中执行的所有工作?

我能想到的唯一方法是使处理程序更新每个服务,并将其DBContext的实例传递给每个服务,然后在处理程序末尾调用SaveChanges。这可以工作,但我想知道是否有更好的方法不必自己实例化每个服务。

fkdswfwqfet 回答:如何在单个事务中执行多个EF Core保存更改在不同服务中的更改?

我认为您正在寻找工作单位模式。在此,您将创建一个对您的DbContext进行引用的工作单元对象。在任何地方,您都将注入工作单元而不是DbContext。由于这是同一范围内的同一对象,因此所有服务也将使用相同的DbContext引用。然后,对SaveChanges()的调用也会同时影响多个表。

这似乎是一个很好的链接:https://cpratt.co/repository-and-unit-of-work-patterns-with-entity-framework/

,

您可以通过制作注入到服务中的单例处理程序来做到这一点。

您想做的事情是您绝对不能!首先,分散在多个服务上的操作通常会花费时间,这意味着您的事务将开放一段时间。其次,如果客户中断且未完成操作链,则您的交易将保持打开状态。第三,您将很难应付并发操作。

一种更好的可能方法是通过使用临时标志存储数据来模拟事务,该标志最后会被清除,或者在需要回滚时用于删除记录。

本文链接:https://www.f2er.com/3118947.html

大家都在问