2016-04-29 16 views
5

Bazı web sitesi veritabanı kodunda hata ayıklayıcıya basıyordum ve veritabanı değişiklikleri uygulanmadan önce yürütmeyi sonlandırdım. Ama yine de veritabanına yazıldılar!KULLANIM bloğu, web sitesi vs windows formunda farklı davranıyor

Bir Windows Form uygulaması kullanarak sorunu yeniden oluşturmaya çalıştım ve veritabanına yazılmadı (beklenen davranış). Web sitesine geri döndüm ve , yaptı.

İşte basit bir örnek sayfa. Bir fark yaparsa ben bir web sitesinde bu çalıştırıyorum:

<%@ 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> 

ben bitirmek yürütme idam ikinci ayıklama baskı veya SubmitChanges() önce kesme noktasında (Shift + F5), . "Satır 2", hata ayıklama penceresine çıkış değil değil, ancak veritabanı değişiklikleri yapılır.

Aynı testi bir Windows Formunda çalıştırmak aynı davranır.

Sayfa kullanım ömrü veya oturum yönetimi bir şekilde burada karışıyor mu? Bu nasıl mümkün olabilir, Hat 2 basılmaz!

+0

Windows formunda bir hata/istisna alıyor musunuz, nasıl çalışmıyor? – raidensan

+0

@raidensan Yeniden yazacağım. Aynı davranmaz. Değişimi veritabanına yazmaz ('Gönder' çağrısından önce iptal ettiğim sürece, beklemediğim gibi). – Ian

+0

Örneğinizde "Debug.WriteLine (" Line 2 ") yerine yeni Exception() yazın ve nasıl gittiğini görün. – Evk

cevap

6

Winform uygulamasında hata ayıklamayı durdurduğunuzda, işlem sonlanır ve kodunuz çalışmayı durdurur.

Asp.net'de durum böyle değil. Hata ayıklayıcısını (genellikle) durdurduğunuzda, iis işlemini sonlandırmaz, sadece hata ayıklayıcısını ayırın. Kodunuz çalışmaya devam eder ve istek tamamlanır.

Bu soru için yinelenenler var, bunu çoğaltılmış olarak işaretlemek için temsilcisi yok.

+0

İyi bir açıklama, arama yaptım ama nedenini bilmemek zorlaştırıyor. Bir dupe bulabileceğimi ve kendimi işaretleyip çizemeyeceğimi göreceğim :) Ya da bana bir dupe bağlayın ve onu işaretleyeceğim. – Ian

+0

Tam olarak bir kopya değil: [link] (http://stackoverflow.com/questions/1338785/the-asp-net-code-still-executes-after-clicking-stopping-debugging-in-vs2008) (İhtiyacınız olanı açıklar) süreci sonlandırmak için) – apr