2009-03-11 6 views
7

Tengo una serie de elementos secundarios de una tabla, que deseo eliminar y luego agregar los nuevos.
No me importa el rendimiento, porque es una operación no frecuente.Cómo eliminar y luego agregar elementos secundarios en LINQ to SQL

¿Cómo debo hacerlo? He tratado Order.items.clear() y Order.Items.Remove(x) pero ambos me dan excepciones

código simplificado:

Dim db As New MainDataDataContext 
    dim o as Order = (From Order In db.Orders Where Order.OrderID = OrderID).FirstOrDefault 
    ''//this will return "An attempt was made to remove a 
    ''//relationship between a Order and a OrderItem. 
    ''//However, one of the relationship's foreign keys 
    ''//(Order.OrderID) cannot be set to null." exception 
    o.Items.Clear() 
    ''//and this will return "EntitySet was modified during enumeration." exception 
    For Each oItem As OrderItem In o.Items 
     o.items.Remove(oItem) 
    Next 

    For Each item As ListViewItem In listViewOrderItems.Items 
     If item.ItemType = ListViewItemType.DataItem Then 
      Dim oItem As New OrderItem 
      oItem.OrderID = OrderID 
      oItem.Product = CType(item.FindControl("txtProduct"), TextBox).Text 
      oItem.Quantity = CType(item.FindControl("txtQuantity"), TextBox).Text 
      Order.items.Add(oItem) 
     End If 
    Next 

    db.SubmitChanges() 

Respuesta

15

Siempre que elimine todos los elementos, también puede usar

db.OrderItems.DeleteAllOnSubmit(o.Items); 
3

No importa, he encontrado la solución (pero no sé si es la mejor)

For Each oItem As OrderItem In o.Items 
    db.OrderItems.DeleteOnSubmit(oItem) 
Next