Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当upper方法捕获异常时,EF存储库未在数据库中插入数据_C#_Dependency Injection_Async Await_Repository_Aspnetboilerplate - Fatal编程技术网

C# 当upper方法捕获异常时,EF存储库未在数据库中插入数据

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

我正在开发一个ASP.NET核心应用程序

我得到了一个AppService异步任务,该任务调用了另一个AppService方法,该方法获取注册所需的数据列表

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和move
UnitOfWorkManager.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)