2011-03-07 5 views
2

클래식 관리자 < - 부서 -> 직원 데이터 모델이 있다고 가정 해 보겠습니다. 관리자가 개인 개체에서 상속 한 직원 엔터티에서 상속하는 곳.코어 데이터 : 공통 속성을 유지하면서 객체의 엔티티를 동적으로 변경하는 방법

관리자와 직원 세트가있는 부서가있는 경우 관리자가 자신의 직업을 잃어 버리고 직원에게만 강등되는 관리자와 관리자로 승격 된 직원 중 하나를 프로그래밍 방식으로 어떻게 나타낼 수 있습니까?

핵심 데이터 용어로, 필자는 관리 대상을 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)에 부울 플래그를 넣어야한다는 것을 알고 있습니다.하지만이 질문에 대한 인위적인 예제입니다. 실제로 플래그를 사용하고 싶지는 않습니다.

따라서 일부 Core Data 마법사가 이미이 작업을 수행하거나 더 좋은 방법을 알고 있다면 듣고 싶습니다! 당신은 AFAIK, 코어 데이터의 엔티티의 유형을 변경할 수 없습니다

답변

2

설명하는 것처럼 엔티티를 변경할 수있는 방법이 없습니다. 새 직원을 만들고 해당 직원 레코드에 관리자 데이터를 복사 한 후 승격 된 직원을 위해 새 관리자를 만들어야합니다.

그러나 기독교인이 제안한 것처럼 관리자가 직원이기도 한 경우 더 좋을 것입니다. 관리자 관련 추가 데이터에 대해 언급하셨습니다. 아마도 특정 직원과 관계가있는 세 번째 테이블에이를 넣을 수 있습니다. 그러면 관리자이기도 한 직원은이 보조 테이블에 저장된 데이터를 갖게됩니다. 관리자를 승진 시키거나 강등시키기 위해 물건을 파괴하고 만드는 것보다 고통스럽지 않습니다.

+0

실제로 나쁜 생각은 아닙니다. (일대일 관계로 다른 엔티티에 "관리자"특정 항목 넣기). 지금은 Employee 엔티티 설명 propertyByName 키를 통해 for 루프를 작성/삭제하고 for 루프를 수행함으로써 승격 및 강등하는 Manager에 대한 두 가지 메소드를 얻었습니다. 괜찮은 것 같아. –

1

건배.

ManagerEmployee의 차이점은 무엇입니까? ManagerEmployee이 아닌가요? Manager은 이고 역할은 Manager입니까? 나의 이해에 대한

나는 이런 식으로 모델링 것 :

부 (들) - >> 직원을

Department은 1의 속성 manager 있습니다 직원이 무엇인지 정의 Employee-1 관계를 매니저.

+0

고마워, 원래는 일종의 매니저 오브젝트가 존재하지 않고 그냥 직원 일 뿐이었다. 하지만 지금은 Manager가 아니라 Employee가 아닌 다른 여러 속성을 정의해야합니다. 그래서 정말 하위 엔티티 여야합니다. 어쨌든, 저는 관리자/부서/직원의 세부 사항을 파악하기가 정말로 어렵습니다. 단지 예일뿐입니다. 그러나, 나는 당신이 옳다고 생각하고, 즉시 엔티티를 변경하는 것은 불가능합니다. –

관련 문제