Linq to SQL DataContext终身管理问题

Jon*_*nes 3 c# linq linq-to-sql

我阅读了Rick Strahl 关于如何处理数据上下文的文章.我的DBML在一个类库中,我通过在库中单独的自定义部分类中创建一个静态Current方法来保持我的数据上下文打开.

public partial class DataContext
{
    public static DataContext Current
    {
        get
        {
            DataContext dc = HttpContext.Current.Items["dc"] as DataContext;
            if (dc == null)
            {
                dc = new ImmediacyPageDataContext();
                HttpContext.Current.Items["dc"] = dc;
            }

            return dc;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后像这样访问它

DataContext dc = DataContext.Current;
Run Code Online (Sandbox Code Playgroud)

但是,每当我更新我的DBML文件时,这都会导致问题.在我尝试构建项目时编辑DBML文件后,我的设计器文件不会重新生成/被删除.如果我尝试运行自定义工具选项,则会返回错误.

我可以解决这个问题的唯一方法是重命名或删除自定义部分类,重新生成设计器文件,然后将我的自定义部分类添加回解决方案.这是一项工作,但是......它有点痛苦.

有没有更好的方法,这将使编辑我的DBML文件更容易,同时尽可能长时间延长我的DC?

Rya*_*saw 5

使用部分DataContext类进入代码文件,并将using语句移动到命名空间中.出于某种原因,除非是这种情况,否则该工具不会生成设计器.

namespace MyNamespace
{
    using System;
    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    using System.Reflection;
    using System.Xml.Linq;

    partial class DataContext
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我相信从VS2008迁移到VS2008 SP1时需要进行此更改,但我可能会混合使用某些版本.