2015-05-24 13 views
1

我正在學習如何使用ASP.NET 5(vNext)。爲了做到這一點,我正在研究一個基本的應用程序。在這個應用程序中,我試圖使用Dapper從幾個POCO(客戶,訂單等)連接到數據庫。如果我理解正確,那麼創建,連接和拆除連接到數據庫的成本很高。如果這是真的,我試圖找出推薦的方式來跨多個對象共享連接。在ASP.NET 5(vNext)中跨POCOs共享Db連接

目前,我有以下幾點:

public class Order 
{ 
    private IDbConnection _connection; 
    public void Save() 
    { 
    using (_connection = new SqlConnection("[MyConnectionString]") 
    { 
     _connection.Open(); 
     _connection.Execute("[INSERTION SQL]"); 
    } 
    } 

    public List<Order> FindByCustomerEmailAddress(string emailAddress) 
    { 
    using (_connection = new SqlConnection("[MyConnectionString]") 
    { 
     _connection.Open(); 
     return _connection.Query<List<Order>>("SELECT o.* FROM Order o, Customer c WHERE o.CustomerId=c.CustomerId AND c.EmailAddress='" + emailAddress + "'");  
    } 
    } 
} 

public class Customer 
{ 
    private IDbConnection _connection; 
    public void Save() 
    { 
    using (_connection = new SqlConnection("[MyConnectionString]") 
    { 
     _connection.Open(); 
     _connection.Execute("[INSERTION SQL]"); 
    } 
    } 

    public Customer FindByEmailAddress(string emailAddress) 
    { 
    using (_connection = new SqlConnection("[MyConnectionString]") 
    { 
     _connection.Open(); 
     return _connection.Query<Customer>("SELECT * FROM Customer WHERE EmailAddress='" + emailAddress + "'");  
    } 
    } 
} 

我想過建立一個Database類,看起來像這樣:

public static class Database 
{ 
    private static IDbConnection Connection { get; set; } 
    public static IDbConnection GetConnection() 
    { 
    if (Connection == null) 
    { 
     Connection = new SqlConnection("[MyConnectionString]"); 
     Connection.Open(); 
    } 
    return Connection; 
    } 
} 

public class Order 
{ 
    public void Save() 
    { 
    var connection = Database.GetConnection(); 
    connection.Execute("[INSERTION SQL]"); 
    } 

    public List<Order> FindByCustomerEmailAddress(string emailAddress) 
    { 
    var connection = Database.GetConnection(); 
    return connection.Query<List<Order>>("SELECT ..."); 
    } 
} 

然而,想着這之後,我不知道,如果這是管理數據庫連接的好策略。以這種方式使用static似乎很危險。但是,似乎有人不得不解決這個問題。但是,我沒有看到任何解釋,所以我不明白它是否真的有效。有人可以與我分享以有效方式管理數據庫連接的推薦方法是什麼?

謝謝!

+0

這是廉價的感謝conn pooling,但真正的原因連接應該共享,以便您可以利用交易。 – usr

回答

0

打開和關閉與數據庫服務器的連接確實很昂貴。但是,.NET正是出於這個原因實現了連接池,並且默認情況下它處於打開狀態。你可以修改它應該保持打開狀態的連接設置(我不記得默認設置)。

所以,如果你的連接字符串是相同的,.NET將重用池中的一個開放連接並使用它。如果不同,它會創建一個新的。

你的第一個代碼在使用「using」時是正確的,所以當你完成時,dispose/close會將連接返回到池中。

查看更多關於此處; https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx