Я выполняю миграцию основных данных, используя 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.