valor una poner obtener nombre encabezado columnas columna cambiar c# database dapper

una - obtener nombre de columnas datatable c#



¿Puedo especificar nombres de columna de base de datos para asignaciones dapper-dot-net? (4)

¿Hay alguna forma con dapper-dot-net de usar un atributo para especificar los nombres de columna que deben usarse y no el nombre de la 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 yo quiera. Nuestra base de datos no tiene una convención de nomenclatura consistente.

Si no está con Dapper, ¿hay otras opciones similares?


Otro enfoque es mapearlo manualmente con el resultado dinámico.

var codes = conn.Query<dynamic>(...sql and params here...) .Select<dynamic,Code>(s=>new Code{Id = s.Id, Type = s.Type, Value = s.code, Description = s.Description});

Claramente, esto introduce escenarios de seguridad de tipos porque está realizando consultas sobre dinámica. Además, tienes que asignar columnas manualmente que es un rollo.

Sin embargo, tiendo a gustarme este enfoque porque es muy transparente. Puede emitir si es necesario (como es el caso con Enums), y básicamente hacer lo que sea necesario para ir desde el conjunto de registros db a sus propiedades.


Para las selecciones, puede agregar constructores a sus clases para realizar el mapeo. Los nombres de los parámetros del constructor deben coincidir con las columnas de la tabla.

A continuación se muestra un ejemplo de la fuente. La tabla se asignará correctamente a la clase.

Mesa:

CREATE TABLE #Users (Id int, Name varchar(20))

Clase:

class UserWithConstructor { public UserWithConstructor(int id, string name) { Ident = id; FullName = name; } public int Ident { get; set; } public string FullName { get; set; } }


Si está utilizando una instrucción de selección directamente o en un procedimiento, puede simplemente asignar un alias a las columnas.

SELECT code as Value FROM yourTable


También puedes Dapper-Extensions un vistazo a Dapper-Extensions .

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

Tiene un asignador 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 solo 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 ensamblaje que sus clases de POCO. La biblioteca utiliza la reflexión para encontrar mapas personalizados y solo escanea un ensamblaje.

Actualización :

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

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