Estoy trabajando con una muestra de código, y solo quiero escuchar algunas opiniones sobre la forma en que han hecho las cosas. Usan el viejo y simple ADO.NET. Tienen una función genérica llamada Lectura que devuelve 1 registro. Aquí está el código:Creando un método de recuperación genérico para devolver 1 registro
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;
}
}
}
No sé por qué:
- Ellos usan
Func<IDataReader, T> make
como parte de la firma del método? ¿Es eficiente hacerlo así? ¿Hay una mejor forma/mejor práctica para hacer esto? - No entiendo
T t = default(T);
? ¿Es eficiente hacerlo así? ¿Hay una mejor forma/mejor práctica para hacer esto? - ¿Qué hace
t = make(reader);
? ¿Es eficiente hacerlo así? ¿Hay una mejor forma/mejor práctica para hacer esto?
La función de llamada sería algo como esto:
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
};
No entiendo la parte Func Make
? ¿Puede alguien explicarme por favor lo que está sucediendo aquí y si esto es buenas prácticas? Cualquier cambio sería apreciado, pero proporcione el código de muestra detallado :)