EntityFramework中的DeadLock可能性

时间:2013-09-26 09:33:54

标签: web-services

我有这个webmethod(从Android应用程序调用)

    [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或其他什么方法阻止它。

1 个答案:

答案 0 :(得分:1)

使用此代码:您不能

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

这一行将等待一个readlock但最终会获得一个,所以不会出现死锁。

context.SaveChanges();

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

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