MASA.Framework icon indicating copy to clipboard operation
MASA.Framework copied to clipboard

后台任务中IEventBus操作的数据怎么才能提交到数据库中去

Open Await-d opened this issue 1 year ago • 6 comments

Description

image image image 数据提交再下图 image image 我的Repository是继承的Masa.BuildingBlocks.Ddd.Domain.Repositories官方IRepository 不管是通过IServiceProvider手动创建获取的还是通过构造出来的Repository的服务都无法提交到数据库中去, 我只知道是我的问题是来自当前请求的生命周期,我的后台服务是没有来自请求的生命周期,所以一直没有把数据提交到数据库中去

如果是通过接口调用的接口,就不会出现这个问题。如果是我手动提交的话 就不会出现这个问题 如图 image 我想除了我自己手写并提交的方式外,应该怎么才能正确触发数据的正常提交了

.NET version

net8

MASA Framework version

1.2.0-preview.5

Await-d avatar Jan 04 '25 11:01 Await-d

请参考文档:事件总线

进程内事件理解为简单事件,事件只存留在程序进程中,应用程序重启时,未执行完成的事件可能会丢失,适合简单的业务; 集成事件理解为消息队列模式,消息会独立存储,应用程序重启,不会丢失事件,但是依赖dapr,适合复杂的业务处理。

Qinyouzeng avatar Jan 06 '25 07:01 Qinyouzeng

image 方法还是上图的 我只是在最后放结束的时候调用了工作单元的 提交 数据就可以更新进去了, 但是我看内部的工作单元后期是会被删除掉的 image 所以对此问题有点疑惑 应该如何控制。 方法如果是从api接口过来的是没有问题的,不用我上方图中方法提交工作单元都可以正常提交到数据库。 针对后台任务不是来自api请求过来的,如果不执行工作单元就不会提交到数据库中去

Await-d avatar Jan 07 '25 01:01 Await-d

上图代码中,构造方法已经有了对象 IMediaRepository 对象,但是下面的执行的内容里面又重新获取了一个新的IMediaRepository (_repository)对象,你可以先尝试把这个IMediaRepository 对象统一,默认的事务是属于第一个IRepository 对象的,框架会监听当前对象的状态更新信息,自动做数据保存处理

Qinyouzeng avatar Jan 07 '25 01:01 Qinyouzeng

image 两种方式是一样的问题 最开始是默认用构造函数来的IMediaRepository 对象,没有使用IServiceProvider去获取的,后面用这个IServiceProvider获取跟构造里面获取的问题是一样的,都是方法结束后没有把数据提交到数据库去

Await-d avatar Jan 07 '25 07:01 Await-d

但是两种写法的问题从外部接口请求的话 不会出现这个问题, 对于我后台从BackgroundService方式过来的方法,如下图 image image 从此处调用的调用的就不会自动提交到数据库中去

Await-d avatar Jan 07 '25 07:01 Await-d

方法期间也不会出现错误

Await-d avatar Jan 07 '25 08:01 Await-d