首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架3.5:分阶段保存具有不同上下文的对象

实体框架3.5:分阶段保存具有不同上下文的对象
EN

Stack Overflow用户
提问于 2012-01-13 11:12:59
回答 1查看 384关注 0票数 0

在C#和EntityFramework3.5中,我有一个有数百万条记录的上下文。这需要大约2GB的内存。我一打电话给SaveChanges(),它就开始填满我的8 GM并开始交换。

我使用了分析器,结果是SQL querie占用了内存。

现在我想分批存钱,但我遇到了问题。

我有一个Locations集合(这个集合又有一些东西的集合和子集合)。当我将其分批并为每个分批分配一个新的上下文时,当我执行context.AddToOrder(firstBatch)时,所有批中的所有位置都突然拥有实体状态Added,尽管它们没有Order。这使得保存失败,因为Order -> Location关系不存在。

当我只向上下文中添加一个子集时,为什么原始集合中的所有对象都得到状态Added

EN

回答 1

Stack Overflow用户

发布于 2012-01-13 14:36:12

我有一个有数百万条记录的上下文。这需要大约2GB的内存。

我知道你不会喜欢这个答案,但它很简单。不要这样做, EF,特别是EFv1还没有做好准备。EF甚至不是处理数十个MBs的工具。您必须为这样的大数据集使用其他工具,或者将您的更新分成多个(在您的情况下是数千甚至数百万),每个小的更改集使用自己的上下文。

我猜当您调用SaveChanges时,EF将尝试实现它的魔力,包括检测实体中的更改和准备执行的语句。可能有内存泄漏,但也可能有许多未释放的内存由于GC。在这种情况下,与你目前的问题无关。

顺便说一句。EF将尝试将您的修改存储在单个事务中。因此,如果您试图将2GB保存在单个事务中,那么您可能会在更多级别上出现问题。

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

https://stackoverflow.com/questions/8849680

复制
相关文章

相似问题

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