帮助我理解MY`Using`和`DataContext`

Ref*_*din 1 c# linq datacontext using linq-to-sql

有人可以向我解释下面的内容.首先是我如何调用该方法,第二位是LINQ方法.

我的好奇心源于这样一个事实,即context如果我不批评该using部分,我会收到错误.

为什么?我显然不完全明白usingcontext's.我想更好地理解这一点.

Guid workerID = new Guid(new ConnectDAL.DAL.Security().GetUserIDByUserLogin(HUD.CurrentUser));

        var myMembers = BLLCmo.GetAllMembers(workerID);
        if (myMembers.Rows.Count != 0)
        {
            dgvMyMembers.DataSource = myMembers;
        }
        else
        {
            var allMembers = BLLCmo.GetAllMembers();
            dgvMyMembers.DataSource = allMembers;
        }




    internal static CmoDataContext context = new CmoDataContext();

    public static DataTable GetAllMembers()
    {
        DataTable dataTable;

        //using (context)
        //{
            var AllEnrollees = from enrollment in context.tblCMOEnrollments
                               select new
                                       {
                                           enrollment.ADRCReferralID,
                                           enrollment.ClientID,
                                           enrollment.CMONurseID,
                                           enrollment.CMOSocialWorkerID,
                                           enrollment.DisenrollmentDate,
                                           enrollment.DisenrollmentReasonID,
                                           enrollment.EconomicSupportWorkerID,
                                           enrollment.EnrollmentDate
                                       };

            dataTable = AllEnrollees.CopyLinqToDataTable();
        //}
        return dataTable;
    }
Run Code Online (Sandbox Code Playgroud)

Jus*_*ren 6

"使用"块会自动处理您正在使用的对象.由于您没有提供有关确切错误的更多详细信息,因此我认为它与"使用"将处理您的"上下文"相关,然后您将尝试再次使用您的上下文.

数据上下文应以原子方式使用.它们已经在内部被编码为高效的,通常没有合理的理由让它像你一样长时间运行.您看到大多数使用"使用"的示例的原因是因为它们在使用之前(或在其中)之前立即初始化了数据上下文,然后不尝试引用已处置的上下文.

最后,处理对象会导致它们释放所有内部内存引用(例如打开的连接,缓存的数据等).

//Our context exists right now ... unless we've already called this method since the app started ;)
var myMembers = BLLCmo.GetAllMembers(workerID); // Context is disposed at the end of this call
if (myMembers.Rows.Count != 0)
{
  dgvMyMembers.DataSource = myMembers;  //No prob, we didn't call our function again
}
else
{
  var allMembers = BLLCmo.GetAllMembers();  // Oops, our context was disposed of earlier
  dgvMyMembers.DataSource = allMembers;
}
Run Code Online (Sandbox Code Playgroud)