ASP.NET 样板实体立即提交
ASP.NET Boilerplate Entity commit immediately
我已经开始使用 ASP.NET 样板中的实体。我试图让我的实体立即提交到数据库,但我似乎做不到。
我打电话给await CreateAsync(EntityDto);
.
我已经尝试覆盖控制器中的 CreateAsync 以包含 CurrentUnitOfWork.SaveChanges();
。
我也尝试过将代码包装在一个工作单元中。
using (var unitOfWork = _unitOfWorkManager.Begin())
{
var entityDto = await CreateAsync(entityDto);
await unitOfWork.CompleteAsync();
}
但它似乎从未立即提交给数据库。
如有任何帮助,我们将不胜感激。
根据official document,你只需要使用当前工作单元的SaveChanges
或SaveChangesAsync
方法即可。
请注意,如果当前工作单元是事务性的,那么如果发生异常,事务中的所有更改都会回滚。甚至保存的更改。
ABP 的 Conventional Unit of Work is scoped around your Controller action and The unit of work is ambient.
你应该需要一个新的工作单元 TransactionScopeOption.RequiresNew
:
using (var unitOfWork = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
{
var entityDto = await CreateAsync(entityDto);
await unitOfWork.CompleteAsync();
}
或者,您可以使用 TransactionScopeOption.Suppress
隐藏工作单元:
using (var unitOfWork = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
{
var entityDto = await CreateAsync(entityDto);
await unitOfWork.CompleteAsync();
}
我已经开始使用 ASP.NET 样板中的实体。我试图让我的实体立即提交到数据库,但我似乎做不到。
我打电话给await CreateAsync(EntityDto);
.
我已经尝试覆盖控制器中的 CreateAsync 以包含 CurrentUnitOfWork.SaveChanges();
。
我也尝试过将代码包装在一个工作单元中。
using (var unitOfWork = _unitOfWorkManager.Begin())
{
var entityDto = await CreateAsync(entityDto);
await unitOfWork.CompleteAsync();
}
但它似乎从未立即提交给数据库。
如有任何帮助,我们将不胜感激。
根据official document,你只需要使用当前工作单元的SaveChanges
或SaveChangesAsync
方法即可。
请注意,如果当前工作单元是事务性的,那么如果发生异常,事务中的所有更改都会回滚。甚至保存的更改。
ABP 的 Conventional Unit of Work is scoped around your Controller action and The unit of work is ambient.
你应该需要一个新的工作单元 TransactionScopeOption.RequiresNew
:
using (var unitOfWork = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
{
var entityDto = await CreateAsync(entityDto);
await unitOfWork.CompleteAsync();
}
或者,您可以使用 TransactionScopeOption.Suppress
隐藏工作单元:
using (var unitOfWork = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
{
var entityDto = await CreateAsync(entityDto);
await unitOfWork.CompleteAsync();
}