【问题标题】:Unloading a data reference in Entity Framework在实体框架中卸载数据引用
【发布时间】:2009-05-21 08:50:53
【问题描述】:

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

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

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

我试图从原始上下文中分离实体,然后从新上下文中查询。那也不行。

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

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

【问题讨论】:

  • 您能否阐明您如何托管 WCF 服务(自托管或 IIS 托管)并解释文件中包含的解决方案参考是什么意思(参考与文件的关系如何)。跨度>
  • 该站点是 IIS 托管的,并且由于实体框架,引用与文件相关。这些文件位于单独的表中,但通过外部键链接到信息表。因此,要从信息表中访问链接实体,您必须加载文件引用。一旦发生延迟加载,您将无法卸载链接。
  • 您的意思是所有文件都在数据库中,并且您有文件的实体类型吗?如果是这样,当您说您尝试分离实体时,是“解决方案”实体还是文件实体?后者应该可以工作。

标签: wcf entity-framework


【解决方案1】:

您遇到的问题可能与默认开启的更改跟踪有关。

可能的解决方案:

使用MergeOption.NoTracking禁用更改跟踪

using (MyEntities _context = new MyEntities())
{
    _context.Widgets.MergeOption = MergeOption.NoTracking;

    return _context.Widgets.ToList();

}

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

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

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

希望这会有所帮助。

【讨论】:

  • 大声笑...伙计...没有意识到您在 2 年前问过这个问题!我确定您现在已经解决了这个问题 =) 希望答案对其他人有所帮助。
  • 谢谢里奇。我一定会尝试一下。我认为最后我只是坚持问题中提到的“解决方案”,但这很可能教会我一些新的东西。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多