ABP学习笔记:关于工作单元的迷惑以及答案

85 篇文章 0 订阅
本文探讨了ABP框架中工作单元特性的使用情况。在ABP中,应用服务方法默认实现工作单元,确保数据库操作在方法执行期间有效。如果在非应用服务方法中使用数据库操作,需要显式开启工作单元。例如,在Controller的Action方法中调用多个数据库操作时,应使用[UnitOfWork]属性。此外,应用服务实例为瞬时性,每次调用都会创建新实例。文章还强调了正确理解和使用工作单元模式的重要性。
摘要由CSDN通过智能技术生成

迷惑:为什么项目里面,有些地方使用了工作单元特性而有些地方没有使用呢?

答案:在ABP中,一个应用服务方法默认是一个工作单元。

由于一个应用服务(Application Services)方法就是一个工作单元,所以数据库连接在方法执行期间都是开启的。如果你在非应用服务(Application Services)中调用GetAll(),你需要显式的使用工作单元模式。如:在Controller的Action方法中要使用GetAll()或调用多个有对数据库操作的AppService方法时, 应该将Action方法使用virtual修饰,并在Action的上面通过[UnitOfWork]进行显示开启工作单元模式。

拓展:对于工作单元方法(应用服务(Application Services)方法),在方法结束时ABP将会自动保存所有数据修改。假设我们需要一个应用服务(Application Services)方法来更新一个Person的Name

	public void UpdateName(UpdateNameInput input)
	{
	    var person = _personRepository.Get(input.PersonId);
	    person.Name = input.NewName;
	}

就是这样,Name被成功修改!我们甚至不需要调用_personRepository.Update方法。ORM框架在工作单元中会跟踪所有实体修改并将修改更新到数据库中。

再拓展:所有应用服务(Application Services)实例的生命周期都是暂时的(Transient)。这意味着在每次使用都会创建新的应用服务(Application Services)实例。这边的Transient,别的资料里叫做瞬时性,真TM傻逼,谁能理解瞬时性是个啥,当时我直接理解成马上销毁的对象。无语

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值