我有这个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或其他什么方法阻止它。
答案 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