Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
Await-d opened this issue Jan 4, 2025 · 6 comments
Assignees

Comments

@Await-d
Copy link

Await-d commented Jan 4, 2025

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

@Qinyouzeng
Copy link
Contributor

请参考文档:事件总线

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

@Await-d
Copy link
Author

Await-d commented Jan 7, 2025

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

@Qinyouzeng
Copy link
Contributor

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

@Await-d
Copy link
Author

Await-d commented Jan 7, 2025

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

@Await-d
Copy link
Author

Await-d commented Jan 7, 2025

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

@Await-d
Copy link
Author

Await-d commented Jan 7, 2025

方法期间也不会出现错误

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants