全球DataContex声明

时间:2014-07-26 18:13:48

标签: c# wcf linq-to-sql

在我的服务界面中,我在每个方法中声明DataClasses1DataContext data = new DataClasses1DataContext();。我可以声明一次并使所有方法都可以访问吗?

2 个答案:

答案 0 :(得分:1)

当然。通过使用一个静态属性来控制公开的datacontext的生命周期,您可以将其声明一次但仍然创建一段特定的时间。特别是,每个http请求创建一个上下文(如果您在IIS中托管服务)是一个好主意,比在任何地方创建实例要好得多。

我在几年前写过博客。

http://www.wiktorzychla.com/2010/12/container-based-pseudosingletons-in.html

更先进的方法是使用IoC容器,并在IoC基础架构创建服务时自动创建和注入datacontext。看一下我的另一篇教程

http://www.wiktorzychla.com/2014/02/lifetime-management-of-wcf-services.html

答案 1 :(得分:1)

您可以将其存储为类中的实例变量:

public class SomeClass : IDisposable
{
    private readonly DataClasses1DataContext _context;
    public SomeClass()
    {
        _context = new DataClasses1DataContext();
    }

    public void Dispose();
    {
        _context.Dispose();
    }

    public void Method1();
    {
        // You can use the _context here
    }

    public void Method2();
    {
        // You can use the _context here
    }

    ... 
}

现在,您可以在类的所有方法中使用context字段。请记住,DbContext应该是短暂的生活。您应该避免将其存储在某些静态字段中。最好的方法是每个HTTP请求都有一个DbContext。