Повторное присоединение графа сущностей и обнаружение изменений в коллекции

Сначала я использую код структуры сущностей и открываю базу данных Northwind через интерфейс WCF REST HTTP.

Я не раскрыл таблицу OrderDetails (элементы заказа), так как не имеет смысла создавать заказ и затем добавлять каждый требуемый OrderDetail отдельно через другую службу. На мой взгляд, это должна быть атомарная транзакция, которая либо завершается успешно, либо терпит неудачу. Поэтому включаю Заказ.OrderDetails при передаче клиенту и предполагаю, что я получу его при создании или обновлении заказа.

Проблема, однако, заключается в обнаружении изменений в коллекции OrderDetails при повторном присоединении объекта Order для обновления. Сам порядок может быть изменен для обновления этих свойств, но это не каскадно для элементов OrderDetail. Таким образом, я могу вручную пройти и настроить обновленные на измененные, но проблема заключается в том, чтобы выяснить, какие из них обновляются в первую очередь. Установка нового OrderDetail на измененный вызовет ошибку при попытке сохранения.

Я прочитал рекомендацию установить для идентификатора новых элементов коллекции значение 0 и использовать его на сервере, чтобы решить, новый он или существующий. Однако Northwind использует составной ключ между OrderID и ProductID для OrderDetails. Они оба должны быть установлены клиентом, поэтому я не могу найти способ обнаружить что-то новое. Кроме того, удаленный OrderDetail не будет существовать в отдельном графе, и мне нужно будет выяснить, что было удалено, и явно удалить его.

Любой совет будет очень признателен.

public override Order Update(Order entity)
{
    dbset.Attach(entity);
    DataContext.Entry(entity).State = EntityState.Modified;

    foreach (var orderDetail in entity.OrderDetails)
    {
        DataContext.Entry(orderDetail).State = EntityState.Modified;
    }

    return entity;
}
5
задан Dan Revell 18 October 2011 в 08:37
поделиться