C# 当upper方法捕获异常时,EF存储库未在数据库中插入数据
我正在开发一个ASP.NET核心应用程序 我得到了一个AppService异步任务,该任务调用了另一个AppService方法,该方法获取注册所需的数据列表C# 当upper方法捕获异常时,EF存储库未在数据库中插入数据,c#,dependency-injection,async-await,repository,aspnetboilerplate,C#,Dependency Injection,Async Await,Repository,Aspnetboilerplate,我正在开发一个ASP.NET核心应用程序 我得到了一个AppService异步任务,该任务调用了另一个AppService方法,该方法获取注册所需的数据列表 public async Task<RegisterOutput> Register(RegisterInput input) { var testTask = profileAppService.GetTestData(); await testTask; UnitOfWorkManager.Curr
public async Task<RegisterOutput> Register(RegisterInput input)
{
var testTask = profileAppService.GetTestData();
await testTask;
UnitOfWorkManager.Current.SaveChanges();
...
}
在数据库中返回正确的id。(f.e.id为100,跳过此实体,在当前表中我得到了…99,101,…)
所以我的问题是-如果Register()方法捕捉到异常,为什么它不存储数据?在这种情况下,如何存储数据
UnitWorkManager保存更改是为了进行研究,看看它们是否解决了我的问题,但显然没有。我也愿意接受任何良好实践建议您可以使用单独的工作单元来处理您的案例
公共类MySampleClass
{
私人只读IUnitOfWorkManager\u unitOfWorkManager;
public MySampleClass(IUnitOfWorkManager unitOfWorkManager)
{
_unitOfWorkManager=unitOfWorkManager;
}
私有void MyDbMethod()
{
使用(var uow=\u unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
{
//做你的数据库操作。。。
wait_unitOfWorkManager.Current.SaveChangesAsync();
等待uow.CompleteAsync();
}
}
}
请参见如果发生异常,执行将在该行停止。若您需要完成您的执行,您应该处理异常并继续另一个可以放置到另一个方法的场景。如果您需要在异常发生与否无关的情况下执行某些代码,您可以使用
try{}catch(exception ex){}finally{}
块并将代码放入finally块,该块始终执行。在这种特殊情况下,我不介意出现异常。我不明白的是,为什么它不保存它,即使它声称它保存了。如果我理解正确,您提到Register()
方法捕获异常,所以您的UnitOfWorkManager.Current.SaveChanges()代码>没有打电话吗?在这种情况下,您可以将逻辑包装为try/catch和moveUnitOfWorkManager.Current.SaveChanges()
到最后{UnitOfWorkManager.Current.SaveChanges();}
block我不明白的是,为什么你没有捕捉到异常,即使你声称你捕捉到了。
public async Task<TestDto> GetTestData()
{
...
long entityId = _entityRepository.InsertAndGetId(entity);
entityDependency.EntityId = entity;
_entityDependencyRepository.Insert(entityDependency);
UnitOfWorkManager.Current.SaveChanges();
}
_entityRepository.InsertAndGetId(entity)