gpt4 book ai didi

c# - 帮助我理解 MY`Using` 和 `DataContext`

转载 作者:太空宇宙 更新时间:2023-11-03 17:47:05 25 4
gpt4 key购买 nike

有人可以向我解释以下内容吗?首先是我调用方法的方式,第二位是 LINQ 方法。

我的好奇源于这样一个事实:如果我取消注释 using 部分,我会收到一个 context 错误。

为什么?我显然不完全理解 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;
}

最佳答案

“使用” block 会自动处理您正在使用的对象。由于您没有提供有关确切错误的更多详细信息,我敢打赌它与“使用”将处理您的“上下文”这一事实有关,然后您将再次尝试使用您的上下文。

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

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

//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;
}

关于c# - 帮助我理解 MY`Using` 和 `DataContext`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1477315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com