Lo scrivo per ricordarmelo, visto che ci ho perso sin troppo tempo!
Per popolare il contenuto di un database ho creato una semplice applicazione console che legge un file csv.
Peccato che una volta eseguita l’applicazione, andata a buon fine senza alcun messaggio di errore, il database non contenesse alcuna modifica!
Rieseguendo l’applicazione, ogni volta era come fosse la prima volta. Ho pensato ad ogni possibile causa, anche perché facendo dei controlli all’interno dell’applicazione il database risultava effettivamente modificato.
Alla fine ho trovato la soluzione su Stackoverflow:
Quando si esegue un’applicazione all’interno di Visual Studio, la build fa una copia del file di database nella cartella bin/debug (o bin/release), ed è li che modifica il database, nonostante le impostazioni di connessione, che evidentemente cambia al volo.
I controlli successivi li facevo nel file del progetto (come da impostazioni di connessione) e non trovavo le modifiche che l’appicazione avrebbe dovuto apportare. Alla successiva esecuzione dell’applicazione, poiché il file aveva le proprietà di build impostate a “content” e “copy always”, nella cartella bin/debug veniva riscritto il file di database originale, ovvero senza modifiche, e tutto ricominciava da capo.
Davvero diabolico.
Da notare che facendo il deploy dell’applicazione ovviamente questo meccanismo non viene messo in atto (il contesto di esecuzione non muta, nel senso che il file di database e la cartella di esecuzione del runtime è quello di installazione) e quindi il problema non si pone.