Сначала я использую код структуры сущностей и выставляю базу данных северного ветра через HTTP-интерфейс WCF REST.
Я не выставлял таблицу OrderDetails (элементы порядка), так как не имеет смысла создаватьOrder и затем добавление каждого необходимого OrderDetail отдельно через другой сервис.На мой взгляд, это должна быть атомарная транзакция, которая либо преуспевает, либо проваливается как единое целое.Поэтому я включаю коллекцию Order.OrderDetails при передаче клиенту и предполагаю, что получу ее при создании или обновлении заказа.
Однако проблема заключается в обнаружении изменений в коллекции OrderDetails при повторном присоединениисущность Order для обновления.Сам порядок может быть изменен для обновления этих свойств, но это не относится к элементам OrderDetail.Поэтому я могу вручную перейти и установить обновленные из них в измененные, но проблема заключается в том, чтобы выяснить, какие из них обновляются в первую очередь.Установка нового OrderDetail в измененное состояние приведет к ошибке при попытке сохранить.
Я прочитал рекомендацию установить Id новых элементов коллекции на 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;
}