¿Usas .NET y Dapper? Este truco con splitOn te ahorrará muchas líneas de código
Aprende cómo mapear relaciones 1:1 en .NET y Dapper con QueryAsync y el parámetro splitOn, sin escribir múltiples consultas.
Una de las grandes ventajas de trabajar con Dapper en .NET es su velocidad y flexibilidad a la hora de mapear resultados de consultas SQL complejas a objetos fuertemente tipados. Sin embargo, cuando se trata de relaciones entre entidades —especialmente relaciones uno a uno (1:1)— pueden surgir dudas sobre cómo hacer este mapeo sin tener que ejecutar múltiples consultas.
Hoy quiero explicarte cómo Dapper nos permite resolver este escenario utilizando QueryAsync
y un parámetro poco conocido pero poderoso: splitOn
.
🧠 Entendiendo la relación 1:1
Supongamos que tienes dos tablas:
Users: contiene los datos del usuario.
Ejemplo de columnas:UserId
,Name
,Email
Addresses: contiene la dirección asociada al usuario.
Ejemplo de columnas:AddressId
,City
,UserId
Existe una relación 1:1 entre Users
y Addresses
: cada usuario tiene una sola dirección y cada dirección pertenece a un solo usuario.
🔧 El problema
Cuando haces una consulta SQL que une estas dos tablas, obtienes una única fila por usuario con todas las columnas mezcladas. Entonces, ¿cómo le dices a Dapper que las primeras columnas corresponden a un objeto User
y las siguientes a un objeto Address
?
Ahí entra en juego el parámetro splitOn
.
⚙️ ¿Qué es splitOn
?
El parámetro splitOn
le indica a Dapper en qué columna debe empezar a mapear el segundo objeto (y los siguientes si hay más).
En este ejemplo, nuestra consulta SQL podría verse así:
Dapper necesita saber dónde termina el objeto User
y empieza el objeto Address
. Si usamos:
Le estamos diciendo: "comienza a mapear el segundo objeto (Address
) a partir de la columna AddressId
". Dapper se encargará de hacer el resto.
✅ Resultado
Con esta técnica puedes:
Ejecutar una sola consulta SQL.
Obtener una lista de objetos
User
donde cada uno contiene su respectiva instancia deAddress
.Evitar múltiples llamadas al servidor SQL y mejorar el rendimiento.
🧪 Consideraciones adicionales
El nombre del campo en
splitOn
debe coincidir exactamente con el nombre de la columna en el resultset.En relaciones más complejas (por ejemplo, 1:N o N:N), puedes aplicar esta misma lógica encadenando más objetos o agrupando los resultados.
💬 ¿Y tú?
¿Has usado splitOn
en Dapper? ¿Lo has combinado con relaciones más complejas? ¿Qué estrategias usas para mapear múltiples entidades en una sola consulta?
Cuéntame en los comentarios, y si este contenido te resultó útil, suscríbete para más artículos prácticos sobre .NET, Dapper y arquitectura de software moderna.
🎓 ¿Quieres escribir mejor código en .NET y Dapper?
🚀 Aprende a mapear relaciones 1:1 correctamente con splitOn
y QueryAsync
.
👉 Suscríbete en www.netuniversity.org
¡Conviértete en un desarrollador .NET profesional! 👨💻👩💻