您的位置:首页 > 其它

EF 数据版本号,处理具体使用方法 RowVersion / Timestamp 使用方法。进行自动处理并发修改

2017-11-29 11:39 681 查看
/*
* <div class="form-group">          // 原始
* <div class="form-group hidden">   // 修改后
*
*
*  原始:  @Html.EditorFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })
*  修改后:@Html.HiddenFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })
*/




生成的页面,进行替换操作。同样适用于 Timestamp

/// <summary>
/// 数据行版本号
/// </summary>
[Display(Name ="数据行版本号")]
[Timestamp]
public byte[] RowVersion { get; set; }




/// <summary>
/// 数据行版本号
/// </summary>
[Display(Name ="数据行版本号")]
[Timestamp]
public byte[] Timestamp { get; set; }


如果发生异常,表示版本不一至。

如:

#region 修改数据时,如果行版本不一至,则报错,内容为:数据版本不一至,请返回重新进入再修改!
private static readonly Exception _DbUpdateConcurrencyException = new Exception("数据版本不一至,请返回重新进入再修改!");
/// <summary>
/// 修改数据时,如果行版本不一至,则报错,内容为:数据版本不一至,请返回重新进入再修改!
/// </summary>
public static Exception DbUpdateConcurrencyException { get { return _DbUpdateConcurrencyException; } }

private static readonly Exception _OptimisticConcurrencyException = new Exception("未设置行版本!");
/// <summary>
/// 未设置行版本!当更新操作违反并发约束时,就会引发此异常。
/// </summary>
public static Exception OptimisticConcurrencyException { get { return _OptimisticConcurrencyException; } }
#endregion

public override async Task<int> SaveChangesAsync()
{
try
{
int result = await base.SaveChangesAsync();
return result;
}
catch (DbUpdateConcurrencyException)
{
throw RowVersionHelper.DbUpdateConcurrencyException;
}
catch (OptimisticConcurrencyException)
{
throw RowVersionHelper.OptimisticConcurrencyException;
}
}


可以处理这个异常,进行自定义处理以给用户弹出友好提示。

<div class="form-group">          // 原始

<div class="form-group hidden">   // 修改后

原始:  @Html.EditorFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })

修改后:@Html.HiddenFor(model => model.RowVersion, new { htmlAttributes = new { @class = "form-control" } })
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐