2015-03-20 2 views
0

Я выполняю миграцию основных данных, используя mapping model.Добавление отношений во время миграции основных данных - самоопределение

Новая модель добавляет отношения к объекту Report под названием rootReport.

Я хотел бы сделать это соотношение обязательным, а не факультативным. Для существующихReport объектов, rootReport должно быть самообслуживанием. Отчеты, которые будут добавлены в будущем, будут ссылаться на другие отчеты как на их корень, не только на самих себя.

Ссылка, которую я дал, имеет хороший обзор того, как работают выражения в модели сопоставления - это те же самые вещи, которые совместимы с NSExpression. Исходя из этого, я использую следующее правило отображения для rootReport:

FUNCTION($manager, 
     "destinationInstancesForEntityMappingNamed:sourceInstances:", 
     "ReportToReport", 
     $source.SELF) 

[. Я отформатирован, что - в файле все это сжато на одной линии]

Однако я не успел чтобы заставить это работать для моего отношения rootReport. Я всегда получаю ошибки проверки следующей миграции с жалобой, что rootReport не установлено в течение некоторого отчета:

NSUnderlyingError = «Error Domain = NSCocoaErrorDomain Code = 134110 \» Операция не мог \ быть завершено U2019t. (Cocoa ошибка 134110). \ «UserInfo = 0x7b294630 {атрибут = rootReport, объект = отчет, причина = Ошибка проверки недостающих значений атрибутов на отношения обязательного назначения}»

Любые подсказки о том, что происходит не так, или предложения о том, как отлаживать? Обработка выполняется в App Kit, поэтому к моменту появления исключения у меня нет никакого контекста, чтобы совать и исследовать!


Существует хорошая прогулка по иерархии отображений из полностью автоматизирован полностью ручной, и все шаги между here.

Если вы хотите узнать больше о том, что вы можете сделать с этими выражениями отображения (которые делает работу хорошо для атрибутов, по крайней мере), там вы хорошие статьи here и here.

Легко настроить выражения отображения для вызова произвольного кода из вашего проекта или существующих методов данных. Все это довольно чисто и элегантно.

Вы делаете это, используя выражение FUNCTION, которое вызывает сопоставление отношений по умолчанию. Для вызова методов класса вы используете FUNCTION(CAST("<Class-Name>", "Class"), "<class-method-name>", <any>, <arguments>, <in>, <a>, <list>), как показано на рисунке here.

ответ

0

Я не уверен, что случилось неправильно.

Возможно, что я внес изменения в целевую модель данных после Я создал модель сопоставления, которую я не представлял, было бы проблемой. Однако, глядя на модели сопоставления с текстовым редактором, они содержат большие двоичные капли, которые, как я подозреваю, могут представлять исходные и целевые модели данных во время создания.

я удалил и воссоздал модель отображения и теперь я не имею никаких проблем с автомодельными ссылками вида:

FUNCTION($manager, 
     "destinationInstancesForEntityMappingNamed:sourceInstances:", 
     "ReportToReport", 
     $source) 

Это почти идентично выражением в вопросе, который я нашел Didn» т работы. Обратите внимание: в этом рабочем выражении используется только $source вместо $source.SELF. Тем не менее, я почти уверен, что раньше бы это пробовал, поэтому я не знаю, было ли это единственной ошибкой.

Смежные вопросы