有人可以请解释下我的。第一是我呼的方法和第二位是皇宫的方法。

我好奇是由于我得到一个 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;
    }
有帮助吗?

解决方案

“用”块自动处理您所使用的对象的。因为你没有给确切的错误是什么进一步的细节,我打赌它涉及到一个事实,即“使用”将部署你的“背景”的,再后来,你会尝试再次使用您的上下文。

数据上下文应该被原子地使用。他们已经在内部编码为有效的这种方式,通常有没有正当理由,以具有一个为长期运行的是你怎么做。你看,使用“使用”多数样品的原因是因为他们之前初始化数据上下文中使用(或它),然后不要试图引用的处置方面。

最后注意到的是,对象的布置使它们释放所有其内部存储器的引用(如打开的连接,高速缓存的数据,等等)。

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

其他提示

你得到错误的,如果你使用 using 因为上下文 设置 第二次这就是所谓的 GetAllMembers().

如果你需要处理的背景下,我sugest你创建的一个 在飞行 在GetAllMembers()而不是具有一个静态的上下文。

检查了文档的 IDisposableusing.

这里有一个链接到一篇文章,可能会帮助你的 生命周期管理的属性.

我也有这个问题,当时不明白,要么。我只是删除了使用和它的工作。问题是延迟加载。在DataContext给了我一个实体,但后来我试图访问父实体的属性(外键的意义上)。因为这个父实体装载的不是第一次,它试图得到它,但在DataContext不见了。所以我用了DataLoadOptions。如果我知道我需要一个相关的实体,我与原来的实体装入它。

例如:您索要发票到您的DataContext,但后来你要访问的客户的名字,就像在invoice.Client.Name。客户端还没有被加载,所以名称是不可用的。

DataLoadOptions也是性能重要,如果你在一个循环需要这相关的实体,您将回到DB多次循环,你如果不预先加载子(或父)的实体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top