0

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

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

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

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

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

4

3 回答 3

1

事实上,你真的不能这样。尤其重要的是,因为 LINQ-to-SQL 可以与 POCO 一起使用。您必须手动处理您的数据上下文,如果您想在各个点使用它们,请保留它们。这里的一种方法可能是使该方法可从数据上下文而不是叶对象中使用 - 然后您被迫了解数据上下文。

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

于 2012-05-23T13:18:48.877 回答
1

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

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

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

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

于 2012-05-23T14:36:17.070 回答
0

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

不,你没有。防止向您的 L2S 实体添加业务逻辑。它很快就会变成一个无法控制的纠结泥球。将这些操作放在使用这些实体的服务类中。例如,使用命令/处理程序查询/处理程序模式。

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

无论您做什么,都要防止一个DataContext实例被多个线程使用。您可以做的是DataContext每个网络请求都有一个。

于 2012-05-23T13:20:19.353 回答