2009-02-25 10 views
8

Ho creato un database .MDF nella mia applicazione WPF.Perché il mio SubmitChanges() non funziona su LINQ-to-SQL?

Ho quindi generato classi LINQ-to-SQL e utilizzato LINQ per ottenere tutti i clienti.

Poi li sfoglio e cambio ciascuno dei loro cognomi.

Tuttavia, quando chiamo SubmitChanges, il database rimane invariato.

Ho pensato che fosse lo scopo di SubmitChanges(), di inviare modifiche al database?

Cosa mi manca, come posso "inviare modifiche" al mio database?

public Window1() 
{ 
    InitializeComponent(); 

    Main2DataContext _db = new Main2DataContext(); 
    var customers = from c in _db.Customers 
        select c; 

    foreach (var customer in customers) 
    { 
     customer.LastName = "CHANGED lastname"; //ListBox shows changes 
    } 

    _db.SubmitChanges(); //does NOT save to database (???) 

} 
+2

Questa è una domanda davvero stupida, ma hai una chiave primaria sul tavolo cliente giusto? –

+0

Sì: ID è la chiave primaria, non consente i valori NULL e Identity Specification è impostato su IsIdentity = Yes. Ho creato il file .MDF con Visual Studio. –

risposta

15

Penso di sapere qual è il problema. Stai usando un file .mdf locale? In questo caso, controlla la cartella bin/debug. Scommetto che hai un database lì con le modifiche. Penso che tu abbia un file .mdf nel tuo progetto che viene copiato nella cartella bin/debug ogni volta che lo fai. Pertanto le modifiche vengono salvate nella copia e non le vedi riflesse nella copia che risiede direttamente nel tuo progetto.

+0

Ho appena eseguito questo e sembra corretto. Collega alla copia bin/debug di MDF e vedrai le modifiche. –

+0

tombola, era così! apprezzo la tenacia di tutti –

+0

Lo so solo perché ho passato ore a rincorrere la stessa cosa prima. Gald I potrebbe aiutare. – Micah

2

Assicurati che il tuo _db non venga reimpostato in un nuovo contesto in qualsiasi punto tra il recupero e la modifica, se così bene è il problema. Inoltre, è possibile semplificare l'assegnazione dell'origine dati facendo TheListBox.ItemsSource = _db.Customers;. Ho molti posti nel codice corrente in cui sto facendo esattamente quello che descrivi e le modifiche stanno proponendo bene. Un ulteriore suggerimento, registrazione di registrazione sul tuo contesto (imposta lo _db.Log su un autore, generalmente utilizzo lo Console.Out in modo da poter vedere le modifiche nella finestra di output durante il debug) in modo da poter vedere le modifiche che si verificano effettivamente quando chiami SubmitChanges().

+0

Ho inserito _db.Log = Console.Out; prima della riga submitchanges, non viene visualizzata nella finestra Output o dove deve essere trasmessa? –

+0

ok, ho semplificato al massimo il codice ora, ottiene solo gli oggetti, li cambia e li salva con SubmitChanges, ma il database continua a non modificarli. Qualche idea sul perché questo è il caso? –

+0

Stai correndo in modalità di debug? Hai anche l'opzione "Reindirizza tutto il testo della finestra di output nella finestra immediata" in Strumenti-> Opzioni-> Debug-> Generale? Se è così, il tuo output arriverà alla finestra immediata, altrimenti Prova a impostare il tuo TextWriter su un StringBuilder e imposta Log. –

Problemi correlati