Tôi đang làm việc thông qua một mẫu mã và tôi chỉ muốn nghe một số ý kiến về cách họ đã làm mọi thứ. Họ sử dụng ADO.NET cũ. Họ có một chức năng chung gọi là Đọc mà mang lại 1 hồ sơ. Đây là mã:Tạo phương pháp truy xuất chung để trả về 1 bản ghi
public static T Read<T>(string storedProcedure, Func<IDataReader, T> make, object[] parms = null)
{
using (SqlConnection connection = new SqlConnection())
{
connection.ConnectionString = connectionString;
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = storedProcedure;
command.SetParameters(parms);
connection.Open();
T t = default(T);
var reader = command.ExecuteReader();
if (reader.Read())
t = make(reader);
return t;
}
}
}
Tôi không biết lý do tại sao:
- Họ sử dụng
Func<IDataReader, T> make
như một phần của phương pháp chữ ký? Có hiệu quả để làm điều đó như thế này không? Có cách nào tốt hơn/thực hành tốt nhất để làm điều này? - Tôi không hiểu
T t = default(T);
? Có hiệu quả để làm điều đó như thế này không? Có cách nào tốt hơn/thực hành tốt nhất để làm điều này? t = make(reader);
làm gì? Có hiệu quả để làm điều đó như thế này không? Có cách nào tốt hơn/thực hành tốt nhất để làm điều này?
Chức năng gọi điện thoại sẽ giống như thế này:
public Customer GetCustomer(int customerId)
{
// Other code here
string storedProcedure = "MyStoredProcedure";
object[] parameters = { "@CustomerId", customerId };
return Db.Read(storedProcedure, Make, parameters);
}
private static Func<IDataReader, Customer> Make = reader =>
new Customer
{
CustomerId = reader["CustomerId"].AsId(),
Company = reader["CompanyName"].AsString(),
City = reader["City"].AsString
};
Tôi không hiểu được một phần Func Make
? Ai đó có thể vui lòng giải thích cho tôi những gì đang xảy ra ở đây và nếu đây là thực hành tốt. Bất kỳ thay đổi nào sẽ được đánh giá cao, nhưng vui lòng cung cấp mã mẫu chi tiết :)