关于EntityFrameWork在实际应用过程中并发处理的问题
1.User实体类
public class User
{
[Key, Column("UserID", Order = 0, TypeName = "varchar"), StringLength(10), Required]
public string UserID { get; set; }
[ConcurrencyCheck, Column("UserName", Order = 1, TypeName = "varchar"), StringLength(50), Required]
public string UserName { get; set; }
}
2.DbContext类
public class UserContext : DbContext
{
public UserContext() : base("name=BlogDB") { }
public IDbSet<User> Users { get; set; }
}
3.UserBLL类(为方便,我将数据访问和业务放在一起)
public class UserBLL
{
public User GetUserById(string UserID)
{
using (db=new UserContext())
{
return db.Users.Find(UserID);
}
}
public void UpdateUser(User user)
{
我们知道,EntityFramework本身的并发机制是完善的,但这是建立在同一个DBContext下
//webform中通过GetUserById获取到User实例,对UserName进行了修改,
//之后将修改之后的User通过该函数传递过来,但该user实例已经不是之前的实例了
//此处可以理解成是一个全新的实例,那么若更新的话,如何保证并发?
比如说:
第一步:webform获取了UserID='01' UserName='sa'的User实例数据
第二部:后来将UserName改成了"as"
第三部:webform修改了UserName='sasa'
第四步:本函数执行修改操作,并提示并发错误
}
}
------解决方案--------------------
沉底啦
------解决方案--------------------
用乐观锁