后台任务中IEventBus操作的数据怎么才能提交到数据库中去
Description
数据提交再下图
我的Repository是继承的Masa.BuildingBlocks.Ddd.Domain.Repositories官方IRepository
不管是通过IServiceProvider手动创建获取的还是通过构造出来的Repository的服务都无法提交到数据库中去,
我只知道是我的问题是来自当前请求的生命周期,我的后台服务是没有来自请求的生命周期,所以一直没有把数据提交到数据库中去
如果是通过接口调用的接口,就不会出现这个问题。如果是我手动提交的话 就不会出现这个问题 如图
我想除了我自己手写并提交的方式外,应该怎么才能正确触发数据的正常提交了
.NET version
net8
MASA Framework version
1.2.0-preview.5
请参考文档:事件总线
进程内事件理解为简单事件,事件只存留在程序进程中,应用程序重启时,未执行完成的事件可能会丢失,适合简单的业务; 集成事件理解为消息队列模式,消息会独立存储,应用程序重启,不会丢失事件,但是依赖dapr,适合复杂的业务处理。
方法还是上图的 我只是在最后放结束的时候调用了工作单元的 提交 数据就可以更新进去了,
但是我看内部的工作单元后期是会被删除掉的
所以对此问题有点疑惑 应该如何控制。 方法如果是从api接口过来的是没有问题的,不用我上方图中方法提交工作单元都可以正常提交到数据库。 针对后台任务不是来自api请求过来的,如果不执行工作单元就不会提交到数据库中去
上图代码中,构造方法已经有了对象 IMediaRepository 对象,但是下面的执行的内容里面又重新获取了一个新的IMediaRepository (_repository)对象,你可以先尝试把这个IMediaRepository 对象统一,默认的事务是属于第一个IRepository 对象的,框架会监听当前对象的状态更新信息,自动做数据保存处理
两种方式是一样的问题 最开始是默认用构造函数来的IMediaRepository 对象,没有使用IServiceProvider去获取的,后面用这个IServiceProvider获取跟构造里面获取的问题是一样的,都是方法结束后没有把数据提交到数据库去
但是两种写法的问题从外部接口请求的话 不会出现这个问题, 对于我后台从BackgroundService方式过来的方法,如下图
从此处调用的调用的就不会自动提交到数据库中去
方法期间也不会出现错误