码迷,mamicode.com
首页 > 其他好文 > 详细

使用EFCore处理并发冲突

时间:2018-06-29 13:57:57      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:mod   nal   org   include   wait   row   nis   start   contex   

一、首先在需要进行并发处理的字段上加上[Timestamp]标记:

public class Department
{
     public int Id { get; set;}
     public int? InstructorId{ get; set; }
     public ICollection<Course> Courses {get; set; }

     [Timestamp]
     public byte[] RowVersion{get; set; }
}

二、然后更新数据库

add-migration updateTimestampForDeparment

update-database

三、重新建基架项目

删除Create和Edit页面内关于RowVersion项目的输入项

四、打开编辑Edit的控制器,修改如下:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int? id, byte[]rowVersion)
{
       if(id==null)
       {
              return NoFound();
       }
       //先查一下数据是否存在
       var department= await 
       _context.Departments.Include(a=>a.Administrator)
                  .SingleOrDefaultAsync(a=>a.Id==id);
   
       if(department==null)
       {
              var deletedDepartment=new Department();
              await TryUpdateModeAsync(deletedDepartment);
              ModelState.AddModelError(string.Empty,"无法进行数据的修改,该部门信息已经被其他人删除!);
              ViewData["InstructorId"]=new SelectList(_context.Instructors, "Id","RealName",deletedDepartment);
              return View(deletedDepartment);              
       }

        //将RowVersion标志原来的值变更为新的值
       _context.Entry(department).Property("RowVersion").OriginalValue = rowVersion; 

        if(await TryUpdateModelAsync<Department>(department, a=>a.Name, a=>a.StartDate, a=>a.Budge(a=>a.InstructorId))
        {
              try
              {

              }
               catch()
               {
                     
               }
        }
}

 

使用EFCore处理并发冲突

标签:mod   nal   org   include   wait   row   nis   start   contex   

原文地址:https://www.cnblogs.com/sky-net/p/9242775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!