Каскадное удаление и отключение объектов в Entity Framework - PullRequest
2 голосов
/ 01 июня 2011

Вот часть Entity Framework модель

db model

В основном у меня есть элементов , которые могут иметь несколько предварительный просмотр , и каждый предварительный просмотр имеет миниатюру (сохраняется в поле большого двоичного объекта Данные в PreviewThumbnail ).

Я использую самоконтроль POCO прокси и шаблон репозитория.Ограничения внешнего ключа применяются как в базе данных, так и в модели Entity Framework.Теперь, поскольку объекты PreviewThumbnail содержат байтовые массивы, я не хочу, чтобы Entity Framework отслеживал их, я просто хочу иметь возможность загружать массив bite [?] И делать что-то с ним, а также распоряжаться им вв то время как.И это соответствующий код:

public ObjectSet<PreviewThumbnail> PreviewThumbnails {
    get {
        if (mPreviewsThumbnailsSet == null) {
            mPreviewsThumbnailsSet = CreateObjectSet<PreviewThumbnail>("PreviewThumbnails");
            mPreviewsThumbnailsSet.MergeOption = MergeOption.NoTracking;
        }
        return mPreviewsThumbnailsSet;
    }
}

И вот как я получаю байты для данного предварительного просмотра:

public byte[] LoadImagePreviewThumbnail(Preview preview) {
    var thumb = this.ObjectContext.PreviewThumbnails.First(t => t.Preview.ID == preview.ID);
    return thumb.Data;
}

Теперь, когда сцена настроена, япытаясь заставить работать каскад удаления - если Item удален, все его Previews также должны быть удалены вместе с их PreviewThumbnails .Звучит хорошо, но при удалении Item выдается следующее исключение:

Отношение из 'FK_PreviewThumbnails_0' AssociationSet находится в состоянии 'Удалено'.Учитывая ограничения множественности, соответствующий «PreviewThumbnails» должен также находиться в состоянии «Удалено».

Если я удаляю действие Cascade OnDelete из 'FK_PreviewThumbnails_0', выдается точно такое же исключение.

Более удивительно (по крайней мере для меня), когда я изменяю кратность в конце PreviewThumbnail (то есть предварительный просмотр не может иметь миниатюру, что, конечно, недопустимо), выдается точно такое же исключение.

Последнее, что я пытался, это полностью удалить связь между Preview и PreviewThumbnail в модели Framework (в конце концов, я могу обойтись без него), но это не такдопустимый - внешний ключ в базе данных должен быть поддержан ассоциацией в концептуальной модели.

Есть ли хороший выход из этой ситуации?

...