Я использую ASP.NET Boilerplate с Code-First Entity Framework и MVC 5. Я хочу обрабатывать параллелизм.В методе Update
я помещаю аннотацию данных Timestamp
для поля RowVersion
в моей сущности.
В менеджере моей сущности и в операции Update
я пытаюсь поймать DbUpdateConcurrencyException
исключение и выбрасывание UserFriendlyException
, но, поскольку UpdateAsync
является асинхронным, я не знаю, где обрабатывать исключение.
Где следует обрабатывать это исключение, чтобы оно было удобным для пользователя и не отображало внутреннюю ошибку сервера?
public abstract class BaseFullAuditedEntity : FullAuditedEntity<Guid>
{
[Timestamp]
public byte[] RowVersion { get; set; }
}
public class Branch : BaseFullAuditedEntity
{
public string Name { get; set; }
}
Код менеджера:
public interface IBranchManager : IDomainService
{
Task<Branch> Update(Branch branch, byte[] RowVersion);
}
public class BranchManager : DomainService, IBranchManager
{
private IRepository<Branch, Guid> _branchRepository { get; }
public async Task<Branch> Update(Branch branch, byte[] RowVersion)
{
try
{
return await _branchRepository.UpdateAsync(branch);
}
catch (DbUpdateConcurrencyException ex)
{
throw new UserFriendlyException("Update Concurrency Happened");
}
}
}