Dapper.Rainbow con esquema de base de datos existente

c# dapper dapper-rainbow

Pregunta

Estoy probando Dapper. Me gusta lo que he visto hasta ahora. Para hacer CRUD simple, uso Dapper.rainbow. Funciona muy bien. Sin embargo, solo funciona si la tabla tiene una columna de identidad con Id de nombre. Tiene sentido tener DB así pero no puedo pedir el cambio de nombre de columna en la base de datos solo para usar Dapper. Para ser más claro, estoy trabajando con una base de datos como Northwind Db. Tiene el nombre de tabla repetido en la columna Id en todas partes.

Para manejar esto, cambié el código Dapper.Rainbow de la siguiente manera:

   public T Get(TId id,string idColumnName="Id")
        {
            return database.Query<T>("select * from " + TableName + " where               "+idColumnName+" = @id", new { id }).FirstOrDefault();
        }

¿Hay una forma mejor de manejar esto, como asignaciones / anotaciones de columnas o algo completamente diferente?

He leído preguntas como estas

Manualmente mapear nombres de columna con propiedades de clase

Dapper.Rainbow VS Dapper.Contrib

(Me encontré con un pequeño problema similar con Dapper.Contrib, lo preguntaré por separado).

Actualización : no estoy seguro si las respuestas son aplicables a mi problema Dapper.Rainbow aquí (Por lo menos, no veo cómo).

¡Gracias por la ayuda de antemano!

Respuesta aceptada

Tuve un problema similar. Las extensiones Dapper existentes no se ajustaban a mi patrón ideal. Quería operaciones CRUD sencillas con valores predeterminados inteligentes sin nada extra. También quería tener modelos con propiedades adicionales que no se asignaran directamente a la base de datos. Por ejemplo, una propiedad FullName que combina FirstName y LastName en su getter, y no agrega FullName a las instrucciones Insertar y Actualizar.

Quería que la columna de la clave principal fuera Id en la mayoría de los casos, pero permitía anular con un atributo.

Finalmente, quería que el nombre de la tabla coincidiera con el nombre de la clase de forma predeterminada, pero permitía anular con un atributo.

Terminé escribiendo mi propia extensión para Dapper que resuelve estos problemas. Está en Github y Nuget. Espero que sea útil para ti.

https://github.com/ericdc1/Dapper.SimpleCRUD



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow