【发布时间】:2019-04-28 05:51:21
【问题描述】:
我正在使用带有代码优先实体框架和 MVC 5 的 ASP.NET 样板。
我想处理并发。在Update 方法中,我在我的实体中为RowVersion 字段添加了Timestamp 数据注释。
在我的实体的管理器和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");
}
}
}
【问题讨论】:
-
是的,我在您回答我之前应用了您建议的相同解决方案,正是我写的内容让我现在更加确定
标签: c# entity-framework asp.net-mvc-5 aspnetboilerplate optimistic-concurrency