Не совсем уверен, что вы пытаетесь сделать здесь, но ...
Первое, что вы не можете изменять свойства, используя только ошибки. Неисправности - это просто заполнители, которые позволяют вам измерять / подсчитывать граф объектов и обходить отношения. Если вы на самом деле измените отношение, оно вызовет ошибку, вызвав загрузку связанных объектов.
Если вы пытаетесь установить отношения между конкретными объектами Channel
, Program
и Broadcast
, используя только ошибки, это не сработает.
Ваш itemsForEntity:
метод, который я не понимаю. Он извлечет каждый существующий управляемый объект переданного объекта, а затем вернет эти объекты в словарь. Это приведет к огромным накладным расходам памяти, особенно в случае Program
объектов, которых насчитывается 8000.
Вы не можете использовать propertiesToFetch
, если не установите выборку возврата в словарь, чего вы не делаете. Вы не можете использовать тип возвращаемого словаря в любом случае, если вам нужно установить отношения. Вы используете оба этих параметра, когда вам нужны только данные, хранящиеся в определенных атрибутах. Это не инструмент для манипулирования отношениями графа объекта.
Установка relationshipKeyPathsForPrefetching
только ускоряет процесс, если вы знаете, что будете иметь доступ к существующим отношениям. Это не помогает, когда вы устанавливаете отношения в первую очередь, например, если в отношениях broadcasts
нет существующих объектов или вы добавляете или удаляете объекты Broadcast
, предварительная выборка ключа broadcasts
ничего не изменит для вас.
Я не уверен, что понимаю вашу модель данных достаточно хорошо, но я думаю, что вы делаете это неправильно. Мне кажется, что вы пытаетесь использовать identifier
как первичный ключ в базе данных SQL, и это контрпродуктивно. В Базовых данных отношение связывается с объектами вместе, а не с общим атрибутом и значением.
Как правило, если у вас есть два или более объектов с одинаковым именем атрибута с одинаковым значением, то в большинстве случаев у вас получается плохо спроектированная модель данных.