Ho incontrato un problema interessante con Entity Framework e basato sul codice che ho dovuto usare per affrontarlo. Sospetto che la mia soluzione non sia l'ideale. Ho una relazione 1-a-molti tra la Tabella A e la Tabella B in cui le entità in TabellaB hanno un riferimento a TabellaA. Ho uno scenario in cui voglio cancellare contemporaneamente tutti i bambini di una riga in TableA e ho pensato che questo potrebbe essere raggiungere semplicemente deselezionando la collezione:Entity Framework - Clear a Child Collection
Entity.Children.Clear()
Purtroppo, quando ho tentato di salvare le modifiche questo prodotto come straniera Violazione chiave.
viene aggiunta una relazione o cancellati da un AssociationSet 'FK_EntityB_EntityA'. Con i vincoli di cardinalità , è necessario aggiungere o eliminare una corrispondente "EntityB" .
La soluzione che ho trovato era quella di eliminare manualmente l'oggetto tramite DeleteObject() del contesto dell'entità, ma so solo che la logica che sto usando deve essere sbagliata.
while (collection.Any())
Entities.DeleteObject(collection.First());
Per uno, il fatto che ho dovuto usare un ciclo in cui() sembra molto meno che ideale, ma suppongo che sia puramente una valutazione semantica da parte mia. In ogni caso, c'è qualcosa di sbagliato in come sto facendo questo, o c'è forse un modo migliore per cancellare una raccolta di entità figlio di un'entità tale che Entity Framework chiama correttamente un'eliminazione dell'archivio dati su tutti gli oggetti rimossi?
Questo sembra perfetto. Da una classe parziale esiste una rotta diretta (o indiretta) al contesto? –
sì, c'è una via indiretta: http: //blogs.msdn.com/alexj/archive/2009/06/08/tip-24-how-to-get-the-objectcontext-from-an-entity.aspx –
Sembra quasi che stia meglio semplicemente costruendo il ciclo while() cancellazione nel mio repository, quindi posso riutilizzarlo facilmente. Non dovrò preoccuparmi degli avvertimenti di risolvere il contesto ed è adeguatamente flessibile. Tuttavia, non ho dovuto scrivere un ciclo while() in C# per un po 'di tempo, mi sembra quasi sbagliato. –