在Entity Framework中卸载数据引用

时间:2009-05-21 08:50:54

标签: wcf entity-framework

目前,我正在努力解决实体框架问题。我有一个位于ef框架之上的wcf服务,并允许对框架进行查询。在某些时候,用户能够从框架中请求文件。这些文件由解决方案条目引用,因此当您从解决方案请求文件时,将加载引用以访问文件存储。

一切正常,但从那时起,每当您执行另一个返回该解决方案条目的查询时,整个文件都会附加到返回结果中。我需要某种方式来分离或卸载引用,这样结果条目只会再次包含对文件存储的已加载引用。

我尝试创建一个新的上下文并查询该上下文以从中检索信息,但是当我这样做时,原始上下文中的实体也会发生变化。

我试图从原始上下文中分离实体,然后从新上下文中查询。这也不起作用。

我找到了一种方法。对于所有非文件下载查询,我分离结果实体,并通过网络发送。我不确定这是不是最好的方法。

我希望有人能够提供一些见解,感谢您的努力。

1 个答案:

答案 0 :(得分:0)

您遇到的问题可能是更改跟踪,默认情况下处于启用状态。

可能的解决方案:

使用MergeOption.NoTracking

停用更改跟踪
using (MyEntities _context = new MyEntities())
{
    _context.Widgets.MergeOption = MergeOption.NoTracking;

    return _context.Widgets.ToList();

}

如果上述解决方案不起作用,此article可能有助于指明您如何处理此问题的正确方向。

最近我遇到了类似的问题。问题是上下文保持对我正在使用的对象的引用(显然)的结果。每次我对同一类型的对象进行更改时,即使使用新的上下文获取(我认为),对象也会被更改。

在我的一位同事的帮助下,由于我使用IoC容器注册的方式(每个网络请求的生活方式),我们确定了上下文。当我将生活方式改为瞬态(最终提供了一个新实例)时,对同类型对象的更改不受影响。

希望这有帮助。