Linq to SQL扩展数据类 - 共享DataContext

时间:2012-05-23 13:13:13

标签: .net linq linq-to-sql datacontext

我正在使用Linq2SQL的部分类功能向我的对象添加一些辅助方法。

问题是我需要在这些辅助方法中执行一些额外的数据库查询,所以我每次都要创建一个新的DataContext。

我想在单个Web服务查询中为所有数据库操作重用DataContext。

如果我将辅助方法保存在一个单独的类中,我只需在类构造函数中初始化一次上下文,并将其重用于所有方法。

对于扩展的Linq2SQL类,我无法弄清楚如何获取对用于检索当前对象的相同DataContext的引用。

3 个答案:

答案 0 :(得分:1)

事实上,你不可能真的如此。尤其是,因为LINQ-to-SQL可以与POCO一起使用。您必须手动处理数据上下文,如果要在各个点使用它们,请保留它们。这里的一种方法可能是从数据上下文而不是叶子对象中获取方法 - 然后您强制知道数据上下文。

在某些情况下,保持数据上下文对“请求”或“上下文”对象可用是解决此问题的好方法,因为这通常很容易获得。

答案 1 :(得分:1)

我不相信有办法获得创建数据上下文。您必须将其传递给自定义方法。在我的实体部分类中,我做了很多这样的操作:

public void Query()
{
    using (var db = new DataContext())
    {
         Query(db);
    }
}

public void Query(DataContext db)
{
    /* do something with the db */
}

这使您可以灵活地传入创建对象的DataContext,或者只是在紧要关头使用新的对象。

答案 2 :(得分:0)

  

问题是我需要执行一些额外的数据库查询   在这些辅助方法中,所以我必须每次都创建一个新的DataContext   时间。

不,不。防止向L2S实体添加业务逻辑。它很快就会成为一个无法控制的纠结泥球。将这些操作放在使用这些实体的服务类中。例如,使用command/handlerquery/handler模式。

  

我想为一个中的所有数据库操作重用一个DataContext   单个Web服务查询。

您做了什么,阻止多个线程使用DataContext实例。您可以做的是每个网络请求只有一个DataContext