Подтвердить что ты не робот

Удалить таблицу разделов платформы Entity Framework

Я использую EF 4 STE для моделирования объекта Attachment. Вложение содержит имя, описание, дату и, самое главное, данные (byte[]). Чтобы оптимизировать загрузку, я не хочу извлекать свойство Data до тех пор, пока это не станет абсолютно необходимым, т.е. Когда пользователь нажимает Download на клиенте.

В попытке следовать этому подходу я использовал метод разбиения таблиц, описанный здесь. Я разделил таблицу Вложения на Вложение (Имя, Описание, Дата) и Вложения > (Данные). Это соотношение 1 к 1 в моей модели EF. Все работает отлично, пока я не попытаюсь удалить Приложение без AttachmentData​​strong > (т.е. attachment.AttachmentData == null). Я получаю следующее исключение:

Неверные данные. Необходимые отношения отсутствуют. Изучите StateEntries, чтобы определить источник нарушения ограничения.

Я видел подобное сообщение, но я не могу заставить его работать с STE и расширением ApplyChanges.

Сейчас мой код доступа к данным прост: я вызываю контекст ApplyChanges(), а затем SaveChanges().

Я пробовал простую функцию удаления SQL и сопоставлял ее с обеими сущностями и фактически работал; однако он сломал вставку. Кажется, я не могу сопоставить функцию вставки для всех свойств для обоих объектов.

Любые идеи по некоторым другим параметрам, которые я могу попробовать? Могут ли отношения между Attachment и AttachmentData быть дополнительными? Когда я делаю это от 1 до 0+, я получаю ошибку отображения, говорящую, что Their primary keys may collide.

Откройте все предложения.

Спасибо!

4b9b3361

Ответ 1

Решение похоже на связанный вопрос, но вы должны использовать специфическую особенность STE - ApplyChanges:

context.Attachments.ApplyChanges(att);
if (context.ObjectStateManager.GetObjectStateEntry(att).State == EntityState.Deleted)
{
    var data = new AttachmentData() {Id = att.Id};
    context.AttachmentDataSet.Attach(data);
    context.AttachmentDataSet.DeleteObject(data);
}
context.SaveChanges();