usando dapper para insertar con el procedimiento almacenado (tal vez tvp)

dapper dapper-extensions dapper-fastcrud dapper-fluentmap dapper-rainbow

Pregunta

Tengo un modelo de PersonalInfo como ese:

public string FirstName { get; set;}
public string LastName { get; set;}
public string Email { get; set; }
public IEnumerable<Addresses> Addresses{ get; set; }

Y mi modelo de Direcciones incluye algo como:

public int AddressId { get; set; }
public string StreedAddress { get; set; }
public string State { get; set; }

Necesito usar el procedimiento almacenado para insertarlos en la base de datos, pero necesito usar Dapper para hacer eso ... Lo siento, soy nuevo ... Intenté algo como lo siguiente y no funcionó:

  var Id =  connection.Execute("usp_Insert", personalInfo, commandType: CommandType.StoredProcedure);
    foreach (Addresses address in personalInfo.Addresses){
        connection.Execute("Insert", new {address, Id}, null, commandType: CommandType.StoredProcedure);
        };

Tal vez estoy haciendo un montón de cosas mal aquí, podría usar un parámetro de tabla validado, pero no sé cómo funciona con dapper.

ACTUALIZAR:

Así que supongo que si no quiero pasar las direcciones en la primera, ¿puedo excluir que envíe primero? Todavía quiero pasar todo el modelo, no un accesorio a la vez.

Gracias

Respuesta aceptada

El problema es que Dapper no puede decir, con procedimientos almacenados, qué parámetros son necesarios. Hay API de base de datos para consultar eso, pero es muy costoso hacerlo todo el tiempo. Para consultas regulares, puede comprender bastante bien lo que se necesita, pero para procedimientos almacenados: son misterios. En consecuencia, Dapper solo intenta incluir todo lo que puede ver.

Su mejor opción es una proyección "nueva" que seleccione las propiedades que necesita para sus parámetros.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué