¿Cómo obtener el nombre de la tabla de POCO con las asignaciones de Dapper Extensions?

c# dapper dapper-extensions

Pregunta

Tengo una tabla con el nombre MyTable en mi base de datos. Se MyTablePoco clase POCO MyTablePoco para esa tabla.

A continuación se muestra el código de asignación de las extensiones de Dapper:

class MyTableMapper : ClassMapper<MyTablePoco>
{
    public MyTableMapper()
    {
        Table("MyTable");
        AutoMap();
    }
}

A continuación está el código donde necesito el nombre de la tabla de la clase POCO:

private string GetTableName<T>()
{
    return typeof(T).Name.Replace("Poco", "");
}

Mi convención para nombrar las clases de POCO es TableName + "Poco" . Basado en esta convención, mi hack de reemplazar "Poco" del nombre de la clase funciona muy bien como se muestra en el ejemplo anterior.

Pero, me gustaría obtener el nombre de la tabla de las configuraciones de asignación en su lugar. Creo que esto será más confiable, ya que evita el manejo de cadenas y suposiciones sobre el nombramiento de POCO.

¿Cómo puedo obtener el nombre de la tabla de la clase POCO con las asignaciones de las extensiones Dapper?

Respuesta popular

El proyecto Dapper Extensions es de código abierto; todos saben eso. Lo descargué de GitHub y lo modifiqué para satisfacer mis necesidades.

Esta característica ya está presente internamente en la biblioteca. DapperExtensions.DapperExtensions siguiente función en static clase static DapperExtensions.DapperExtensions :

public static string GetTableName<TPoco>() where TPoco : class
{
    return new SqlGeneratorImpl(_configuration).GetTableName(GetMap<TPoco>());
}

Aquí, TPoco es tu clase POCO.

Además, para obtener el nombre de la columna mapeada, agregué la siguiente función:

public static string GetColumnName<TPoco>(string propertyName) where TPoco : class
{
    return new SqlGeneratorImpl(_configuration).GetColumnName(GetMap<TPoco>(), propertyName, false);
}

Aquí, TPoco es su clase POCO y propertyName es el nombre de la propiedad de la clase POCO. Uno puede obtener fácilmente el nombre de la propiedad en Framework 4.5 o superior como:

nameof(myPocoInstance.MyProperty)

Las pruebas básicas funcionan bien; Todavía no lo he probado a fondo. Actualizaré esta respuesta en caso de cualquier cambio.

Tenga en cuenta que no recomiendo esto como solución estándar; esto es solo un truco que funciona para mis necesidades. Realmente me gustaría ver esto como una característica regular en la biblioteca. Por favor, publique una respuesta si tiene una mejor solución. De lo contrario, comenta para mejorar la solución sugerida aquí.



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é