2008-08-27 27 views
7

herding code podcast 14'te birisi, stackoverflow sayfanın altındaki bir istek sırasında yürütülen sorguları görüntülediğinden bahseder.Linq'den DataContext'e Sorgular Nasıl İzlenir

Bana göre mükemmel bir fikir gibi geliyor. Bir sayfa her yüklendiğinde, ne sql ifadelerinin yürütüldüğünü ve ayrıca toplam DB gidiş dönüş sayısının ne olduğunu bilmek istiyorum. Bu problem için herkesin temiz bir çözümü var mı?

Sizce kabul edilebilir bir sorgu sayısı nedir? Geliştirme sırasında, bir sayfa oluşturmak için 30'dan fazla sorgunun gerekli olması durumunda başvurumun bir istisna oluşturduğunu düşünüyordum.

DÜZENLEME: Sanırım sorumu açık bir şekilde açıklamamalıydım. Bir HTTP talebi sırasında bir web uygulaması bir düzine veya daha fazla sql deyimi yürütebilir. Bu ifadelerin, sayfanın altına eklenerek, sayıların bir sayımının sayılmasını istiyorum. Son olarak

public HeraldDBDataContext() 
     : base(ConfigurationManager.ConnectionStrings["Herald"].ConnectionString, mappingSource) 
    { 
     Log = new Logger(); 
    } 

: DataContext en yapıcı ben kurulumunda

public class Logger : StreamWriter 
    { 
     public string Buffer { get; private set; } 
     public int QueryCounter { get; private set; } 

     public Logger() : base(new MemoryStream()) 
     {} 

     public override void Write(string value) 
     { 
      Buffer += value + "<br/><br/>"; 
      if (!value.StartsWith("--")) QueryCounter++; 
     } 

     public override void WriteLine(string value) 
     { 
      Buffer += value + "<br/><br/>"; 
      if (!value.StartsWith("--")) QueryCounter++; 
     } 
    } 

logger:

Ben DataContext yazabilir TextWriter sınıf oluşturuldu:

BURAYA MY ÇÖZÜM OLDUĞU Sonuçları sayfanın sonuna eklemek için Application_OnEndRequest olayını kullanıyorum:

protected void Application_OnEndRequest(Object sender, EventArgs e) 
    { 
     Logger logger = DataContextFactory.Context.Log as Logger; 
     Response.Write("Query count : " + logger.QueryCounter); 
     Response.Write("<br/><br/>"); 
     Response.Write(logger.Buffer); 
    } 

cevap

3

.ToString() öğesini bir var sorgu değişkenine koyarsanız sql değerini alırsınız. Bunu Debug en VS2008'de kullanabilirsiniz. Debug Visualizer

örn: Eylem

Linq itibaren
var query = from p in db.Table 
      select p; 

MessageBox.SHow(query.ToString()); 
3
System.IO.StreamWriter httpResponseStreamWriter = 
new StreamWriter(HttpContext.Current.Response.OutputStream); 

dataContext.Log = httpResponseStreamWriter; 
olan

Sayfanıza yapıştırın ve SQL sayfada dökülmüş. Açıkçası, bunu etkinleştirebileceğiniz/devre dışı bırakabileceğiniz küçük bir yöntemle sardım.

+0

Yardım almam için bana yardımcı oldu: Db.Log = Console.Out; – Haroon