我正在使用Linq2SQL的部分类功能向我的对象添加一些辅助方法。
问题是我需要在这些辅助方法中执行一些额外的数据库查询,所以我每次都要创建一个新的DataContext。
我想在单个Web服务查询中为所有数据库操作重用DataContext。
如果我将辅助方法保存在一个单独的类中,我只需在类构造函数中初始化一次上下文,并将其重用于所有方法。
对于扩展的Linq2SQL类,我无法弄清楚如何获取对用于检索当前对象的相同DataContext的引用。
答案 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/handler和query/handler模式。
我想为一个中的所有数据库操作重用一个DataContext 单个Web服务查询。
您做了什么,阻止多个线程使用DataContext
实例。您可以做的是每个网络请求只有一个DataContext
。