c# – 关于在Linq中重用db上下文的意见

我有一个使用 linq访问数据库的类.一些方法称其他方法.例如:
class UserManager
{
   public User[] getList()
   {
       using(var db = new MyContext())
       {
             return db.Users.Where(item => item.Active == false);
       }
    }
    public User[] addUser(string name)
    {
       using(var db = new MyContext())
       {
           db.Users.InsertOnSubmit(new User() { id = Guid.NewId(),name = name,active = false ...});
       }
       return getList();
    }

在对addUser的调用中,我需要返回新列表. (我知道它不是很好的设计,但为了简单起见,我已经删除了细节.)但是,对getList的调用会创建第二个数据上下文.

我可以用额外的方法填写这个,即:

public getList()
{
     using(var db = new MyContext())
        return getList(db);
}
public getList(MyContext db)
{
      ...
}

然后在addUser中替换我的调用,以保持相同的数据上下文.

我似乎在我的代码中看到了很多类型的东西,我担心创建和释放所有这些数据上下文的成本.有没有人对是否值得投入额外的工作以消除这些背景的创建和删除有意见?

解决方法

Microsoft提供以下建议/建议,以避免重用DataContext实例 http://msdn.microsoft.com/en-us/library/bb386929.aspx

常见问题(LINQ to sql)

Connection Pooling

Q. Is there a construct that can help
with DataContext pooling?

A. Do not try to reuse instances of
DataContext.
Each DataContext
maintains state (including an identity
cache) for one particular edit/query
session. To obtain new instances based
on the current state of the database,
use a new DataContext.

You can still use underlying ADO.NET connection pooling. For more information,see sql Server Connection Pooling (ADO.NET).

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString("x2"));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable<Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include "WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...