Saltar al contenido

Llame al procedimiento almacenado de dapper que acepta la lista del tipo de tabla definida por el usuario

El tutorial o código que encontrarás en este post es la solución más eficiente y válida que hallamos a tus dudas o dilema.

Solución:

Mi problema también es que tengo autos en la lista genérica List Cars y quiero pasar esta lista al procedimiento almacenado. ¿Existe una forma elegante de cómo hacerlo?

Necesitas convierta su lista genérica Car a una tabla de datos y luego pasarlo al procedimiento almacenado. Un punto a tener en cuenta es que el orden de sus campos debe ser igual que se define en el tipo de tabla definida por el usuario en base de datos De lo contrario, los datos no se guardarán correctamente. y eso debe tener el mismo número de columnas también.

Uso este método para convertir List a DataTable. Puedes llamarlo como yourList.ToDataTable()

public static DataTable ToDataTable(this List iList)
    
        DataTable dataTable = new DataTable();
        PropertyDescriptorCollection propertyDescriptorCollection =
            TypeDescriptor.GetProperties(typeof(T));
        for (int i = 0; i < propertyDescriptorCollection.Count; i++)
        
            PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[i];
            Type type = propertyDescriptor.PropertyType;

            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
                type = Nullable.GetUnderlyingType(type);


            dataTable.Columns.Add(propertyDescriptor.Name, type);
        
        object[] values = new object[propertyDescriptorCollection.Count];
        foreach (T iListItem in iList)
        
            for (int i = 0; i < values.Length; i++)
            
                values[i] = propertyDescriptorCollection[i].GetValue(iListItem);
            
            dataTable.Rows.Add(values);
        
        return dataTable;
    

Sé que esto es un poco viejo, pero pensé que lo publicaría de todos modos ya que busqué hacerlo un poco más fácil. Espero haberlo hecho con un paquete NuGet que creo que permitirá código como:

public class CarType

  public int CARID  get; set; 
  public string CARNAME get; set; 


var cars = new Listnew CarType  CARID = 1, CARNAME = "Volvo";

var parameters = new DynamicParameters();
parameters.AddTable("@Cars", "CarType", cars)

 var result = con.Query("InsertCars", parameters, commandType: CommandType.StoredProcedure);

Paquete NuGet: https://www.nuget.org/packages/Dapper.ParameterExtensions/0.2.0
Todavía está en sus primeras etapas, ¡así que puede que no funcione con todo!

Lea el LÉAME y siéntase libre de contribuir en GitHub: https://github.com/RasicN/Dapper-Parameters

Aquí puedes ver las reseñas y valoraciones de los lectores

Al final de todo puedes encontrar las críticas de otros creadores, tú además tienes la libertad de dejar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *