我们说我有以下代码:
class foo
{
public void bar()
{
bar1();
bar2();
}
private void bar1()
{
using (var dataContext = new SomeDataContext())
{
//do some query
}
}
private void bar2()
{
using (var dataContext = new SomeDataContext())
{
//do some query
}
}
}
以表演的名义,我应该考虑:
class foo
{
public void bar()
{
using (var dataContext = new SomeDataContext())
{
bar1(dataContext);
bar2(dataContext);
}
}
private void bar1(SomeDataContext dataContext)
{
}
//similar for bar2
}
答案 0 :(得分:0)
你应该考虑这个提示:
1)您的连接将一直处于打开状态,直到bar1
和bar2
完成。
2)如果bar1
中发生导致您的连接关闭的任何异常,则必须在bar2
中将其打开。至少你需要一个检查连接状态的if
语句。
创建数据上下文的新实例几乎总是不是一项昂贵的工作。你应该首先(并且在最佳实践中)调整你的查询。
如果我想为你的代码编写场景代码,我会在每个方法中创建实例(因为我与这两个方法没有关系)但是像这样:
class foo
{
var dataContext ;
public void bar()
{
bar1();
bar2();
}
private void bar1()
{
using (dataContext = new SomeDataContext())
{
//do some query
}
}
private void bar2()
{
using (dataContext = new SomeDataContext())
{
//do some query
}
}
}
我希望这个帮助