假设您拥有经典的经理< - Department(s) - >>员工数据模型。 Manager从继承自Person实体的Employee实体继承的地方。
如果我有一个部门,一个经理和一组员工,我怎样才能以编程方式代表经理失去工作并被降级为一个员工,其中一个员工被提升为经理?
在核心数据的说法中,我想采用一个托管对象并更改其实体,尽管将其保留为Person的子类。有一种聪明的方法吗?或者我是否必须编写方法来推广员工并将管理员降级为:
+ (Employee *)demoteManager:(Manager *)manager {
// Get the context
NSManagedObjectContext *context = [manager managedObjectContext];
// Create a new employee object (mogenerator style)
Employee *employee = [Employee insertIntoManageObjectContext:context];
// Set attributes etc
employee.name = self.name;
// Set relationships etc
Department *dept = manager.manages;
[dept addEmployeesObject:employee];
employee.department = dept;
dept.manager = nil;
manager.manages = nil;
// Delete manager
[context deleteObject:manager];
// Save
NSError *error = nil;
[context save:&error];
return employee;
}
等?我意识到我应该在Employee(isManager)上放置一个布尔标志,但这是一个人为的例子,实际上我不想使用标志。
所以,如果某些核心数据向导已经这样做或者知道更好的方式,我很乐意听到!
干杯,
答案 0 :(得分:2)
无法像您所描述的那样更改实体。您需要创建一个新员工,将经理的数据复制到该员工记录,并为升职员工创建一个新经理。
然而,正如克里斯蒂安所说,如果你的经理也是一名雇员,那会更好。您提到了特定于管理器的其他数据。也许你可以把它放到与特定员工有关系的第三个表中。然后,任何也是经理的员工都会将数据存储在此辅助表中。比破坏和创造物品只是为了促进或降低经理人的痛苦要小得多。
答案 1 :(得分:1)
您无法更改核心数据AFAIK中的实体类型。
Manager
和Employee
之间有什么区别? Manager
还不是Employee
吗?不是Manager
Employee
,角色为Manager
?
根据我的理解,我会像这样建模:
部门 - >>员工
且Department
的属性manager
与Employee
的关系为1:1,定义了哪位员工是经理。