我正在使用Entity Framework构建一个ASP.NET MVC 4应用程序,其中多个线程可以同时访问一个表(添加,删除行等)。现在我正在每个控制器中执行using (UserDBContext db = new UserDBContext())
(因此,为每个请求创建一个新的DBContext
,因为MVC框架为每个请求创建一个单独的线程)。从我读到的,这是安全的;但是,我很好奇:
当两个线程访问同一个表但不是同一行时会发生什么?是否允许两个线程同时访问?
当两个线程修改相同的行时会发生什么?比如说,一个试图读取而另一个试图删除?一个线程是否被阻塞(进入休眠状态),然后在另一个线程完成时被自动唤醒?
谢谢!
答案 0 :(得分:4)
1:锁定数据库。保证多用户场景是数据库的首要任务之一。学习基础知识。有好书。
2:锁定。再次。人们将不得不等待。
这是非常基础的,所以我建议你退两步,得到类似" SQL for dummies"并了解任何体面数据库保证的ACID条件。顺便说一句,这里没有与EF有关。这都是在数据库内部级别完成的。