[英]DbUpdateConcurrencyException in Entity Framework Code First
[英]Entity Framework Code First with Fluent API Concurrency `DbUpdateConcurrencyException` Not Raising
我正在尝试使用实体框架6处理并发。
public partial class Group : BaseEntity
{
public byte[] RowVersion { get; set; }
...............
}
制图
public partial class GroupMap : EntityTypeConfiguration<Group>
{
public GroupMap()
{
this.ToTable("CRM_Sales_Group");
this.HasKey(c => c.Id);
//tried like this too -> this.Property(e => e.RowVersion).IsRowVersion();
this.Property(e => e.RowVersion).IsConcurrencyToken().IsRowVersion();
}
通用存储库更新方法不会修改状态,它只是进行验证,然后调用savechanges();。
public virtual void Update(T entity)
{
try
{
if (entity == null)
throw new ArgumentNullException("entity");
}
catch (DbEntityValidationException dbEx)
{
var msg = string.Empty;
foreach (var validationErrors in dbEx.EntityValidationErrors)
foreach (var validationError in validationErrors.ValidationErrors)
msg += Environment.NewLine + string.Format("Property: {0} Error: {1}", validationError.PropertyName,
validationError.ErrorMessage);
var fail = new Exception(msg, dbEx);
//Debug.WriteLine(fail.Message, fail);
throw fail;
}
}
}
_groupRepository.Update(group);
并且在剃刀视图中;
@Html.HiddenFor(model => model.RowVersion)
仍然无法在控制器中捕获它
public ActionResult Edit(GroupModel model)
{
if (ModelState.IsValid)
{
try
{
group = model.ToEntity(group);
_groupService.UpdateGroup(group);
ContainerResolver.Resolve<IDbContext>().SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.Single();
throw;
}
}
return View(model);
}
我真正想念的是什么?
好吧,我正在尝试遵循官方文档。 http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net- mvc-应用程序 。 我试图在浏览器的两个不同选项卡中编辑同一记录,并更新了一个记录,而在另一选项卡更新中更新了同一记录。 rowversion的值有所不同,但未触发异常。
其实我很想念
db.Entry(departmentToUpdate).OriginalValues["RowVersion"] = rowVersion;
现在可以正常工作了:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.