繁体   English   中英

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

[英]Linq to SQL Extended Data Classes - Share a DataContext

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

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

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

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

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

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

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

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

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

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

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

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

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

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

无论你做什么, DataContext阻止多个线程使用DataContext实例。 你可以做的是每个web请求有一个DataContext

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM