EntityFramework中可能存在死锁



我有这个网络方法(从安卓应用程序调用)

    [WebMethod]
    public bool addVotes(string username,string password,int votes)
    {
        bool success= false;
        if (Membership.ValidateUser(username, password) == true)
        {
            DbContext context = new DbContext();
            AppUsers user = context.AppUsers.Where(x => x.Username.Equals(username)).FirstOrDefault();
            if (user != null)
            {
                user.Votat += votes;
                context.SaveChanges();
                success = true;
            }
        }
        return success;
    }

此 Web 服务将在同一时间段(两三个小时内)从 80 个用户(可能)调用。我担心在读取或更新数据库中的数据时会出现死锁。你能告诉我天气有死锁的可能性,如果有这种可能性,我该如何用EF或sql或其他方式防止它。

使用此代码:

你不能
AppUsers user = context.AppUsers.Where(x => x.Username.Equals(username)).FirstOrDefault();

此行将等待读取锁,但最终它将获得一个,因此不会出现死锁。

context.SaveChanges();

此行将尝试更新您的用户表。它将等待写锁,但它最终会得到一个,然后继续前进。
您只能在插入/删除/...在多个表上,通常在游标迭代期间发生。
我还没有遇到过EF最终陷入僵局的情况,所以我不会太担心。

也许你会发现这篇文章很有用:http://blogs.msdn.com/b/diego/archive/2012/04/01/tips-to-avoid-deadlocks-in-entity-framework-applications.aspx

最新更新