Il contesto dei dati EF6 genera un'eccezione di stackoverflow dopo che SqlBulkCopy ha acquisito dati di grandi dimensioni

entity-framework-6 sqlbulkcopy wpf

Domanda

Ho una situazione, considera:

  1. Database di SQL Server 2014 con tabella T1.
  2. Applicazione WPF con EF6 per conservare i dati nella tabella T1.

L'applicazione è in esecuzione OK.

All'avvio dell'app, se la tabella T1 è vuota (0 record), SqlBulkCopy viene utilizzato per inserire 5000 record in T1 consentendo l'attivazione dei trigger e il controllo dei vincoli, il risultato è:

  1. La tabella T1 è piena di 5000 record.
  2. Tutti i trigger sono stati attivati ​​e i vincoli sono stati controllati e nessuno di essi è stato violato.
  3. Il problema è che, dopo il completamento di SqlBulkCopy.WriteToServer, il contesto.T1 si arresta in modo anomalo una volta provato a enumerarlo, generando un'eccezione StackOverfolow.

Ho provato a inizializzare il contesto ma senza successo.

La procedura avrà successo in due casi:

  1. Se l'app viene chiusa e ri-eseguita, il contesto leggerà T1 con successo.
  2. Se sono stati applicati tutti i passaggi in cui T1 ha almeno un record (l'app viene avviata con una tabella T1 non vuota).

Cosa potrebbe causare l'eccezione StackOverflow.

Risposta popolare

Ok, problema risolto, nel caso in cui qualcun altro dovesse affrontare un errore simile, condividerò la mia soluzione.

Ho modificato il modello T4 per consentire all'EDM di produrre entità dal mio database che:

  1. Implementare la proprietà INotifyPropertyChanged.

  2. Applicare la convalida dei dati implementando INotifyDataErrorInfo e utilizzando DataAnnotations controllando le regole di convalida nella classe separata Metadata.

Ciò ha causato l'eccezione di StackOverFlow.

La disabilitazione della convalida proprietà ha risolto il problema.

Pertanto, Data Validation non è il benvenuto come SqlBulkCopy mentre WriteToServer è in corso.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow