我正在學習如何使用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
似乎很危險。但是,似乎有人不得不解決這個問題。但是,我沒有看到任何解釋,所以我不明白它是否真的有效。有人可以與我分享以有效方式管理數據庫連接的推薦方法是什麼?
謝謝!
這是廉價的感謝conn pooling,但真正的原因連接應該共享,以便您可以利用交易。 – usr