繁体   English   中英

首先具有Fluent API并发性的实体框架代码`DbUpdateConcurrencyException`不引发

[英]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);
        }

我真正想念的是什么?

更新1

好吧,我正在尝试遵循官方文档。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM