¿Puedo especificar nombres de columna DB para las asignaciones dapper-dot-net?

c# dapper database

Pregunta

¿Hay alguna manera con dapper-dot-net para usar un atributo para especificar los nombres de columna que se deben usar y no el nombre de propiedad?

public class Code
{
    public int Id { get; set; }
    public string Type { get; set; }
    // This is called code in the table.
    public string Value { get; set; }
    public string Description { get; set; }
}

Me gustaría poder nombrar mis propiedades como prefiera. Nuestra base de datos no tiene una convención de nomenclatura consistente.

Si no es con Dapper, ¿hay opciones similares adicionales?

Respuesta aceptada

También puedes ver Dapper-Extensions .

Dapper Extensions es una pequeña biblioteca que complementa a Dapper al agregar operaciones CRUD básicas (Obtener, Insertar, Actualizar, Eliminar) para sus POCO.

Tiene un mapeador de clase automático , donde puede especificar sus asignaciones de campos personalizados. Por ejemplo:

public class CodeCustomMapper : ClassMapper<Code>
{
    public CodeCustomMapper()
    {
        base.Table("Codes");
        Map(f => f.Id).Key(KeyType.Identity);
        Map(f => f.Type).Column("Type");
        Map(f => f.Value).Column("Code");
        Map(f => f.Description).Column("Foo");
    }
}

Entonces lo haces:

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var code= new Code{ Type = "Foo", Value = "Bar" };
    int id = cn.Insert(code);
    cn.Close();
}

Tenga en cuenta que debe mantener sus mapas personalizados en el mismo conjunto que sus clases POCO. La biblioteca usa la reflexión para encontrar mapas personalizados y solo escanea un ensamblaje.

Actualización :

Ahora puede usar SetMappingAssemblies para registrar una lista de ensambles para escanear:

DapperExtensions.SetMappingAssemblies(new[] { typeof(MyCustomClassMapper).Assembly });

Respuesta popular

Si está utilizando una instrucción select directamente o en un procedimiento, puede alias las columnas.

SELECT code as Value FROM yourTable


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