如何属性保存与其他实体具有一对多关系的更新后的托管对象?

如果我的核心数据中有三个实体,它们彼此之间具有一对多关系:

extension Progress {

    @nonobjc public class func createFetchRequest() -> NSFetchRequest<Progress> {
        return NSFetchRequest<Progress>(entityName: "Progress")
    }

    @NSManaged public var goal: goal
    @NSManaged public var metric: Set<Metric>

}

extension Metric {

    @nonobjc public class func createFetchRequest() -> NSFetchRequest<Metric> {
        return NSFetchRequest<Metric>(entityName: "Metric")
    }
    
    @NSManaged public var value: NSDecimalNumber
    @NSManaged public var metricTogoal: goal
    @NSManaged public var progress: Progress

}

extension goal {

    @nonobjc public class func createFetchRequest() -> NSFetchRequest<goal> {
        return NSFetchRequest<goal>(entityName: "goal")
    }

    @NSManaged public var title: String
    @NSManaged public var progress: Set<Progress>
    @NSManaged public var goalToMetric: Set<Metric>
}

如果获取了其中一个实体并进行了更新:

let metricRequest = Metric.createFetchRequest()
metricRequest.predicate = NSPredicate(format: "value == %@",metric.value)
if let fetchedMetric = try? self.context.fetch(metricRequest) {
   // update Metric
}

我是否还必须获取其余两个实体并将新更新的实体附加到它们?

if let fetchedgoal = try? self.context.fetch(goalRequest) {
   fetchedgoal.goalToMetric.append(updatedMetric)
}

if let fetchedProgress = try? self.context.fetch(goalProgress) {
   fetchedProgress.metric.append(updatedMetric)
}

还是核心数据足够聪明,我只需要保存更新后实体的上下文,其余部分就可以解决?

iCMS 回答:如何属性保存与其他实体具有一对多关系的更新后的托管对象?

我是否还必须获取其余两个实体并将新更新的实体附加到它们?

不。 您可以了解有关关系数据库如何工作的更多信息,here

单个Metric对象对应于CoreData支持的数据库中专用表中的单个记录。 如果您更新value中的Metric-则不需要更新关系。 在一对多关系的情况下,数据库中的每个Metric记录将仅存储ObjectIDGoal中的ProgressGoalProgress记录都不会存储有关它们与之相关的度量的任何信息。

本文链接:https://www.f2er.com/1693755.html

大家都在问