2011-02-07 18 views
14

Ho un'entità "Richiesta" con una relazione 1 .. * all'entità "RequestProperty". Quindi c'è una collezione di oggetti RequestProperty in "Request". Quando aggiorno una "Richiesta", desidero eliminare tutti gli elementi in RequestProperty EntityCollection e aggiungere i nuovi elementi dall'oggetto dominio in entrata. Quando eseguo un'iterazione sulla raccolta Request.Properties e chiamo una rimozione o un sull'elemento, l'enumerazione non riesce perché la raccolta è stata modificata.Entity Framework 4 Elimina oggetto dalla raccolta di entità

A partire da ora sto facendo questo:

while (true) 
{ 
    if (newRequest.Properties.Count > 0) 
     context.RequestPropertySet.DeleteObject(newRequest.Properties.First()); 
    else 
     break; 
} 

Dal momento che questo non è davvero "cool" Ho pensato che ci deve essere un altro modo per svuotare una raccolta di una relazione. Grazie per i tuoi pensieri.

risposta

19

La risposta dipende dal modo in cui hai modellato i vostri entità. Se si utilizza una relazione indipendente comune o una relazione di chiave esterna, sarà necessario utilizzare il proprio approccio corrente: lo sto utilizzando anche nel mio progetto.

Se è stata definita una relazione di identificazione, sarà possibile chiamare solo Clear alla raccolta come @Craig descritto. La relazione identificativa è una relazione speciale in cui la chiave primaria dell'entità dipendente contiene la chiave esterna dell'entità padre.

Example EF model

L'esempio mostra Order entità e OrderItem entità con chiave esterna identificare relazione tra loro. La chiave primaria di OrderItem è costituita da Id e OrderId univoci, ovvero FK della tabella Order. Con questa configurazione non è necessario iterare attraverso OrderItem s ed eliminare ogni elemento separatamente. La semplice rimozione di OrderItem dalla raccolta verrà eseguita come eliminazione nel database e la raccolta di eliminazione eliminerà tutti i documenti relativi a OrderItem nel database.

+0

Sto cercando di utilizzare essenzialmente la stessa struttura del modello di Ordine <-association-> OrderItem in alto, senza successo. Continuo a ricevere il seguente errore in fase di esecuzione: Namespace.Models.OrderItem:: EntityType 'OrderItem' non ha alcuna chiave definita. Definire la chiave per questo EntityType. OrderItem: EntityType: EntitySet 'OrderItems' è basato sul tipo 'OrderItem' che non ha chiavi definite. La differenza principale è che non ho alcuna proprietà non chiave in OrderItem. – user1003221

1

utilizzare il metodo Clear():

newRequest.Properties.Clear(); 
+1

Non funziona in quanto la colonna chiave esterna nella tabella RequestProperty non è annullabile. Credo che potrei cambiarlo e/o impostare una cascata su delete. – hoetz

+1

In questo caso, * dovresti * impostare una cascata su delete, IMHO. –

Problemi correlati