È ansible rimuovere il bambino dalla raccolta e risolvere i problemi su SaveChanges?

Stiamo utilizzando il codice di Entity Framework in primo luogo con relazioni a chiave esterna. Esaminiamo i modi per gestire la rimozione di oggetti da una quadro ICollection nella nostra applicazione.

Quando abbiamo un’ quadro con relazioni figlio, possiamo aggiungere oggetti direttamente al loro ICollection usando il metodo Aggiungi. Ora quando usi rimuovere ottieni l’errore

System.InvalidOperationException received Message = L’operazione non è riuscita: la relazione non può essere modificata perché una o più proprietà della chiave esterna non sono annullabili. Quando viene apportata una modifica a una relazione, la relativa proprietà della chiave esterna viene impostata su un valore nullo. Se la chiave esterna non supporta valori nulli, deve essere definita una nuova relazione, la proprietà chiave esterna deve essere assegnata a un altro valore non nullo o l’object non correlato deve essere eliminato.

Capisco che questo è perché Rimuovi sulla raccolta elimina solo la relazione annullando la chiave esterna. Volevamo scrivere la nostra logica aziendale nella nostra quadro e consentire la rimozione.

Quindi estrai l’ quadro radice dal suo Reposorio, ad es. Ordine da OrderRepository, quindi chiama un metodo specifico dell’ quadro, ad esempio Order.AddOrderline(Orderline orderline) Aggiunge una OrderLine agli ordini virtual ICollection OrderLines

Tuttavia non possiamo scrivere codice come Order.CancelOrderline(int orderLineId) perché la semplice rimozione da ICollection causa un errore nelle modifiche di risparmio.

Non sembra esserci comunque per raggiungere questo risultato semplicemente manipolando le raccolte di oggetti. Ovviamente possiamo rimuovere direttamente dal contesto. Comunque mi piacerebbe farne parte dell’entity framework. Possiamo ripulire determinate entity framework senza chiave esterna nell’evento SaveChanges di Entity Framework? Ovviamente è necessario dire a EF quali quadro possono essere rimosse se hanno una chiave straniera nullo.

Attualmente stiamo utilizzando un modello di repository in modo che il controllore non abbia accesso al contesto. Ovviamente potrei usare un repository OrderLine o rimuovere il metodo OrderLine sul repository Order. Tuttavia mi chiedo solo se fosse ansible scrivere il codice sull’ quadro senza riferimenti al meccanismo di persistenza.

Pensieri? Stiamo sbagliando tutto questo? Gli altri ORM ti consentono semplicemente di rimuovere da raccolte figli?