我是一个庞大的LINQ2SQL粉丝。但我在每个函数中都使用了大量DataContext,并随后使用了查询。然而,我知道还有更好的方法…
也许是这样的?
protected dbMYDataContext FA(dbMYDataContext dt)
{
using (dt = new dbMYDataContext())
{
return dt;
}
}
protected void FunctionA() : FA
{
}
protected void FunctionB() : FA
{
}
因此,口头禅是,每当你想创建DataContext时,都要继承或调用这个函数FA。但是,当我继承它时,我会出错。问题似乎是什么,减少一直使用DataContext的最佳实践是什么。
建议?
在使用L2S时,我做了一些事情,这些事情极大地改善了情况。
1) 使用问题中显示的using语句。这是正确的做事方式
2) 如果我正在进行只读查询。。。我设置了(DataContext).ObjectTrackingEnabled=false。这基本上不跟踪对象,并稍微提高了性能。默认情况下,它设置为true。
3) 如果我在一个程序中使用一个查询超过5次,我会预编译查询,以使事情发生得更快。这种方法有一些注意事项,但在最后使用.ToList()似乎可以帮我解决所有问题:D后续链接:http://www.codinghorror.com/blog/2010/03/compiled-or-bust.html
值得记住的是,每次创建数据上下文时,都会获得最新的数据。例如,你创建了一个数据上下文的类实例,另一个用户更新了一个表,你不会看到它(或者至少我从来没有看到过,但这可能是我做事的方式。请注意):)
示例代码(未测试):
protected void MyFunction()
{
using(MyDataContext db = new MyDataContext())
{
// uncomment the following line for read only queries
// db.ObjectTrackingEnabled = false;
// implementation here
}
}
使用工作单元模式
请参阅本文。