首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-同时执行多个查询时出错

实体框架-同时执行多个查询时出错
EN

Stack Overflow用户
提问于 2011-02-09 00:42:54
回答 1查看 618关注 0票数 1

在我的申请中同时发生了两件事。计时器每隔几秒钟在后台线程中触发更新数据网格的请求。下面是该线程运行的代码:

代码语言:javascript
复制
    // Query
    var qryPickupRequests = from pr in objDataContext.pickupRequests
                                .Include("toLocation")
                                .Include("fromLocation")
                                .Include("person")
                            orderby pr.creationDate ascending
                            select pr;

    // Refresh from server?
    if (boolRefreshFromServer)
        (qryPickupRequests as ObjectQuery).MergeOption = MergeOption.PreserveChanges;

    // Limit?
    if (intLimit > 0)
        return qryPickupRequests.Take(intLimit).ToList<pickupRequest>();
    else
        return qryPickupRequests.ToList<pickupRequest>();

现在,在UI线程中,还有另一个打开的表单正在更新位置网格:

代码语言:javascript
复制
/// <summary>
/// Refreshes the specified location data grid
/// </summary>
/// <param name="sender">Instance of GridLookupEdit to update</param>
private static void RefreshLocations(object sender) {

    GridLookUpEdit objEditor = sender as GridLookUpEdit;

    objEditor.Properties.DataSource = BRData.Models.LocationModel.GetLocationList(true);
    objEditor.Properties.DisplayMember = "locationName";
    objEditor.Properties.ValueMember = "locationID";

}

我遇到的问题是,当这两个代码块完全同时执行时。我得到以下错误:

内部例外情况如下:

已经有一个与此连接相关联的开放DataReader,必须先关闭该连接。

为什么并发数据库操作不能被实体框架--或者我--正确地处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-09 01:15:34

实体框架对象上下文不是线程安全的。确保您使用的是与您使用的每个线程不同的上下文--从示例代码中可以看出您所做的并不清楚,但这将是我对问题所在的第一个猜测。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4940253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档