¿Cómo mapear una columna de identidad, que tiene un nombre diferente, con Dapper?

c# dapper

Pregunta

Tengo una base de datos con columnas de id como BookId, AuthorId, etc. Mis archivos de código, sin embargo, solo tienen una propiedad Id. Estoy intentando convertir partes del programa que usan NHibernate con Dapper, así que estoy tratando de eliminar la necesidad de tener ambas propiedades, Id y BookId. NHibernate tiene un mapa de identidad incorporado que asigna BookId a la propiedad Id de los objetos Libro y de forma similar AutorId a la propiedad Id en los objetos Autor.

¿Hay alguna manera de hacer esto Dapper, fuera de dar un alias a la columna, en la consulta SQL?

public class Book {
  public int Id { get; set; }
  public string Name { get; set; }
}

public class Author {
  public int Id { get; set; }
  public string Name { get; set; }
}

Una consulta de muestra que estoy usando se ve así:

select * from Books b inner join Author a on a.AuthorId = b.AuthorId

Si Dapper no es compatible con esto fácilmente, ¿alguna idea sobre qué otras opciones tengo?

Respuesta aceptada

Por diseño, dapper no tiene una capa de mapeo. Un paso por ese camino, y antes de saber lo que ha sucedido, de repente nos estaremos ahogando en los archivos de configuración. Entonces: dos opciones:

  • agregar un alias en el SQL
  • agrega una cuña en el C #

entonces cualquiera (sql):

select BookId as [Id], Name from Books

o (C #):

private int BookId { get { return Id; } set { Id = value; } } // just for dapper


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é