gil*_*gha 3 c# asp.net concurrency entity-framework dbcontext
我已经使用ASP.NET Web窗体和Entity Framework 6开发了一个Web应用程序。
我已经读到我应该为每个请求实例化一个新的DbContext实例(使用“ using”键),而不是尝试将其持久化。
现在,在所有需要查询数据库的地方,我都将实例化DbContext:
protected void Page_Load(object sender, EventArgs e)
{
using(var tmcc = new TMCContext())
{
// querying tmcc entities and/or update them
// ....
tmcc.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果两个人同时加载页面怎么办?这意味着将有两个并发的DbContext实例。这不是问题吗?
感谢您的回答。
在ASP.NET中,每个请求都在其自己的执行线程上进行处理。您在处理该请求的范围内创建的所有对象仅在该请求的范围内,除非您将对象明确地存储在共享位置(例如静态属性)。这意味着您的上下文将并排存在,而无需其他实例的知识:实体框架完全支持的方案。
并发更改数据的问题有些麻烦-可以想象,有两个用户同时对同一行数据进行更改。实体框架和SQL Server都会使这种情况发生。默认情况下,SQL Server将接受服务器接收更改的顺序。如果您有冲突的更改,即一组更改与另一组更改不兼容(例如,两个用户将“名称”字段更新为两个不同的值),则处理的更改最后“获胜”;这就是您将看到应用于冲突列的更改。
不幸的是,您想如何解决这些问题是一个很大的话题,在这里无法回答。这将取决于您的用户需求,而不是其他任何事情-让最后一次提交获胜可能是可以的,您可以走简单的路。否则,您将需要阅读一些有关该主题的内容。
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |