2011-08-09 22 views
2

鑑於此代碼片段如何通過從MVC3

public abstract class Foo 
{ 
    private static SqlConnection _sqlConnection; 

    protected SqlConnection GetOpenConnection() 
    { 
     if (_sqlConnection == null) 
     { 
      _sqlConnection = new SqlConnection("connection string"); 
     } 
     return _sqlConnection; 
    } 

    protected abstract void Execute(); 
} 

public class FooImpl : Foo 
{ 

    protected override void Execute() 
    { 
     var myConn = GetOpenConnection(); 
     var dog = myConn.Query<dynamic>("select 'dog' Animal"); 
     var first = dog.First(); 

     string animalType = first.Animal; 
     // more stuff here 
    } 
} 

你將如何包裝在一個異形連接的連接,如果你沒有進入一個MVC-迷你分析器連接到一個基類連接創建過程?重寫超類中的代碼並將其包裝在那裏?這將涉及更改從基地繼承的數百個類。我更喜歡改變基類的方法,只需要對supers進行一些必要的修改。

謝謝 斯蒂芬

回答

3

有點試驗和錯誤之後,嗯,我妥協,並在基礎庫增加了一個裁判MvcMiniProfiler,改變了連接代碼位。

protected DbConnection GetOpenConnection() 
    { 
     if (_connection == null) 
     { 
      _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connection string "].ConnectionString); 
      _connection.Open(); 
     } 
     return MvcMiniProfiler.Data.ProfiledDbConnection.Get(_connection, MiniProfiler.Current); 
    } 

    private static SqlConnection _connection; 

這適用於在MVC項目都託管(用於描繪的目的,在這裏我們沒有這種能力(QA /生產數據庫))和WPF/Windows服務

+0

尼斯;雖然在連接創建過程中很少有人討厭,但結果通常很有啓發性,可以消除酸味; p –

+0

總的來說,我只是向我們的開發者展示了這一點,燈泡開始閃爍。 –

+0

它變得更好。我向我們的數據庫管理員展示了我認爲正在執行的查詢,他們進來的時間大約爲150毫秒,他說的第一件事是「你知道如果你將參數從nvchar(4000)更改爲varchar(15)以獲得更好的性能「是的,我們現在所有的查詢都在10ms以內。哇靠!根據規範http://code.google.com/p/dapper-dot-net/ Ansi字符串和varchar –