2012-02-25 15 views
6

Tengo una base de datos con columnas de id como BookId, AuthorId, etc. Sin embargo, mis archivos de código 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 integrado que asigna BookId a la propiedad Id de los objetos Libro y, de forma similar, AuthorId a la propiedad Id en objetos Autor.Cómo mapear una columna de identidad, que tiene un nombre diferente, con Dapper?

¿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 ejemplo que estoy usando el siguiente aspecto:

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

Si Dapper no admite esta facilidad, cualquier idea de qué otras opciones tengo?

+0

He hecho esto usando un alias para la columna. ¿Por qué no quieres usar un alias? – LordHits

+0

@LordHits Estoy intentando evitar eso porque tengo muchas columnas devueltas. Prefiero no tener que escribir explícitamente cada uno en sql. Además, no creo que funcione como se espera con la mesa se une –

Respuesta

15

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. Por lo tanto: dos opciones:

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

así que o (SQL):

select BookId as [Id], Name from Books 

o (C#):

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