Estoy usando primero el código de entidad de marco y exponiendo la base de datos de northwind a través de una interfaz HTTP REST de WCF.Vuelva a conectar un gráfico de entidad y detecte los cambios en la colección
No he expuesto la tabla OrderDetails (artículos de pedido) ya que no tiene sentido crear un pedido y luego agregar cada OrderDetail requerido por separado a través de otro servicio. En mi opinión, debe ser una transacción atómica que tenga éxito o fracase como tal. Por lo tanto, incluyo la colección Order.OrderDetails al pasar al cliente y supongo que voy a obtener uno cuando se crea o actualiza un pedido.
El problema, sin embargo, parece ser la detección de cambios en la colección OrderDetails al volver a conectar la entidad Order para una actualización. El orden en sí se puede configurar como modificado para actualizar esas propiedades, pero esto no se aplica en cascada a los artículos OrderDetail. De modo que puedo pasar manualmente y configurar los actualizados para modificarlos, pero el problema radica en averiguar cuáles se actualizan en primer lugar. Configurar un nuevo OrderDetail para modificar causará un error cuando intente guardar.
He leído una recomendación para establecer Id de los nuevos elementos de la colección en 0 y en el servidor usar eso para decidir si es nuevo o existente. Northwind, sin embargo, utiliza una clave compuesta entre OrderID y ProductID para OrderDetails. Ambos tendrán que ser configurados por el cliente, por lo que no puedo encontrar una manera de detectar cuál es nuevo. Además, un OrderDetail eliminado no existirá en el gráfico separado y tendré que averiguar qué se ha eliminado y eliminarlo explícitamente.
Cualquier consejo sería muy apreciado.
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;
}
Gran respuesta. ¡Gracias por tomarse el tiempo! –
¿No cree que tiene alguna idea de por qué el equipo de EF decidió no seguir el escenario de adjuntar gráficos de entidad y hacerlo un poco más automático? Estoy pensando que podría deberse a no querer permitir que el cliente actualice, digamos Producto en una orden - Artículo de pedido - Escenario del producto. –
Cuanto más pienso en este tema, más creo que la automatización total no es posible o confiable (la confiabilidad es exactamente lo que usted describe; la actualización automática podría modificar entidades que no desea modificar). –