编辑上下文中的所有实体

Posted

技术标签:

【中文标题】编辑上下文中的所有实体【英文标题】:Edit all entities in context 【发布时间】:2015-11-09 22:14:09 【问题描述】:

我对使用 Magical Record 更改所有记录的某些属性时的最佳做法有疑问。

我发现的唯一方法是获取保存块中的所有实体并在逐个枚举之后。有更好的解决方案吗?

 [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) 
        NSArray * devices = [CDDevice MR_findByAttribute:@"primary" withValue:@"YES" inContext:localContext];

        [devices enumerateObjectsUsingBlock:^(CDDevice  * device, NSUInteger idx, BOOL * _Nonnull stop) 
            CDDevice * tmpDevice = [device MR_inContext:localContext];
            tmpDevice.primary = @(0);
        ];
     completion:^(BOOL contextDidSave, NSError *error) 
        ;
    ];

有点像

[CDDevice MR_ChangeAtribute:"primary" toValue:@(0)];

所有 CDDevice 记录的更改主要更改为 YES。

【问题讨论】:

【参考方案1】:

这是核心数据方式。获取、更改、重复。

但是,如果您有很多事情要做,您应该将它们全部包装在一个自动释放池中,并分小批进行,然后将每个批次的对象转回故障。这可以防止内存爆炸。

但是,您可以通过使用 NSBatchUpdateRequest 来避免所有这些。

我没有使用 MR,但是通过谷歌快速搜索发现了这个链接,标题为“Add support for magical batch requests”。

但是,这组功能的提交似乎相对较新(10 月 10 日提交),因此您必须自己做一些工作,看看它是否已成为正式版本......或者是否您想使用预发布版本。

【讨论】:

以上是关于编辑上下文中的所有实体的主要内容,如果未能解决你的问题,请参考以下文章

在保存和从上下文中删除之前验证实体

drupal 7中的上下文过滤器视图

EF框架学习---EF中的在线和离线场景

实体类型 <class> 不是当前上下文模型的一部分

实体框架 4:为所有实体创建单个图表是不是有意义?

在代码优先实体框架中手动编辑数据库