我使用ASP.NET MVC 4和Entity Framewwork数据库第一种方法。我通常按以下方式进行CURD操作。
DashBordDataClassesDataContext context;
public string Create(ProjectModel model)
{
string message = string.Empty;
using (context = new DashBordDataClassesDataContext())
{
using (TransactionScope scopw = new TransactionScope())
{
tblProject tb = new tblProject();
tb.ProjectName = model.ProjectName;
context.tblProjects.InsertOnSubmit(tb);
Save();
}
}
return message;
}
最近我遇到了一个系统架构,他通过我的代码并提出了下面的问题,我无法提供正确的答案。
"当可能有大量用户运行相同的Create方法时,您将如何管理连接?"
他建议在多个用户之间共享一个连接。
我想知道他的解决方案是否实用
答案 0 :(得分:3)
.Net默认使用连接池。当连接超出范围时,它将被传递回池以供重用。整个事情是围绕这个概念建立的,你必须不遗余力地做一些与众不同的事情。
换句话说,ms会为您完成所有这些操作,因此您不必在代码中担心这一点。
在多个用户之间共享连接会导致比解决的问题更多的问题。例如,如何在同一个连接上同时拥有多个事务范围?不同的trans-isolation也会成为一个问题,在你知道自己所处的位置之前,你有几种不同类型的连接,并且你正在编写大量代码以对抗专门为解决这个问题而设计的框架而受到伤害。
连接数,它们保持活动的时间等是可配置的。我只需要打两次。一旦进入安装程序,并且一次应对支持sql server 2000到2010.
这确实假设(正如EF框架所做的那样)你并没有依赖于东西。例如,所有连接对象都是通过using语句实例化的,所以一旦完成它们就会被处理掉。
答案 1 :(得分:0)
杀死你的系统架构师:=) 永远不要共享连接,或使用静态DbContext!