5

Un po 'frustrato qui. Sto cercando di trovare un modo per supportare l'aggiornamento a cascata con il framework di entità e non sembra esserci un modo integrato. La ricerca in rete mostra fondamentalmente tutti dicendo che non si dovrebbe mai modificare un valore di chiave primaria, ma ci sono casi validi in cui si dovrebbe (ad esempio un valore UPC come chiave primaria, e i codici a barre UPC stanno diventando più grandi, il che significa che l'aggiornamento del quelli esistenti e mantenendo le corrette relazioni con le chiavi estranee).Entity framework e UPDATE CASCADE

Un approccio è apparentemente quello di attingere all'evento SavingChanges, vedere se i campi chiave primaria stanno cambiando, e se così attraversano le proprietà di navigazione e aggiornano i sottotabali in questo modo.

Questo, in teoria, funzionerebbe. Ma sembra solo ingombrante. Qualcuno ha un'idea migliore? Non posso credere che Bill avrebbe lasciato questa roba fuori dal framework solo perché molte persone non lo fanno. SQL Server lo supporta ancora ...

Thx!

+0

Chi è Bill ???? –

+0

Il conto che ha avviato MS ... –

+0

, vedere MSDN: http://msdn.microsoft.com/en-us/library/bb738695.aspx – RPM1984

risposta

2

Non è possibile modificare la chiave primaria direttamente tramite EF. Il problema è che EF apporta modifiche laddove la chiave primaria è x. Quindi non puoi cambiare x.

È possibile eseguire una procedura memorizzata da EF che aggiornerebbe una chiave primaria.

Nel tuo caso con i codici a barre, avrei una chiave primaria che è un numero di incremento automatico, quindi un codice a barre come un campo diverso con un indice univoco.

+0

Thx. La cosa del codice a barre era un esempio, e posso pensare ad un sacco di scenari (nei sistemi esistenti) in cui il codice a barre sarebbe stato reso la chiave primaria. Era perfettamente logico fino a quando EF non si è trasferito in città. Penso che l'unico modo per ora sarà quello di gestire le cascate da sole, anche se ciò significa che dovrò aggiornare l'entità dopo un salvataggio per assicurarmi di avere i dati corretti in memoria. –