Stavo passando attraverso il debugger in qualche codice del database del sito Web e terminato l'esecuzione prima dell'applicazione delle modifiche al database. Ma erano ancora scritti nel database!UTILIZZO Il blocco si comporta in modo diverso nel modulo sito Web vs Windows
Ho provato a ricreare il problema utilizzando un'applicazione Windows Form e non ha scritto nel database (comportamento previsto). Sono tornato al sito web e lo ha effettuato.
Ecco una semplice pagina di esempio. Sto facendo funzionare questo in un web sito se fa la differenza:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<!DOCTYPE html>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
using (MsSqlDataContextDataContext db = new MsSqlDataContextDataContext())
{
Product product = db.Products.First(p => p.id == 21);
Debug.WriteLine("Line 1");
// I learnt the hard way that if you try to update the database with the value
// that already exists, it seems to get optimised away.
// The update must a new value.
product.Type = "bogus" + DateTime.UtcNow.Ticks;
Debug.WriteLine("Line 2"); // <- Breakpoint here
db.SubmitChanges();
}
}
</script>
<html>
<head runat="server">
</head>
</html>
finisco esecuzione (Maiusc + F5) al punto di interruzione, prima la seconda stampa di debug o SubmitChanges()
vengono eseguiti . "Linea 2" è non output nella finestra di debug, ma il database cambia è creato.
L'esecuzione dello stesso test in un Windows Form si comporta allo stesso modo.
Il ciclo di vita della pagina o la gestione della sessione interferiscono in qualche modo qui? Com'è possibile, la Linea 2 non viene stampata!
Si sta verificando un errore/un'eccezione nel modulo di Windows, come funziona? – raidensan
@raidensan Lo riformulerò. Non si comporta allo stesso modo. Non scrive la modifica al database (come mi aspettavo non dovrebbe, dato che ho abortito prima della chiamata 'Submit'). – Ian
Esegui "throw new Exception()" invece di "Debug.WriteLine (" Line 2 ")" nell'esempio e vedi come va. – Evk