Asignación de Dapper.NET con anotaciones de datos

dapper data-annotations

Pregunta

Entonces tengo una clase con una propiedad como esta:

public class Foo
{
  [Column("GBBRSH")
  public static string Gibberish { get; set;}
  ....
}

Para guardar datos, lo configuro para que las instrucciones update / insert usen una función personalizada:

public static string GetTableColumnName(PropertyInfo property)
{
  var type = typeof(ColumnAttribute);
  var prop = property.GetCustomAttributes(type, false);

  if (propr.Count() > 0)
    return ((ColumnAttribute)prop.First()).Name;
  return property.Name;
}

Esto funciona bien, pero noté que cuando voy a recuperar los datos, en realidad no estoy retirando datos a través de la función para esta columna en particular. Noté que los demás datos presentes fueron retirados, pero la columna en cuestión era el único campo con datos que no se recuperaron.

1) ¿Hay alguna manera de quizás usar la función GetTableColumnName para la parte de recuperación de Dapper?

2) ¿Hay alguna manera de obligar a Dapper.NET a lanzar una excepción si ocurre un escenario como este? Realmente no quiero tener una falsa sensación de seguridad de que todo está funcionando como esperaba cuando en realidad no es así (entiendo que estoy usando una asignación que Dapper.NET no usa de forma predeterminada, pero sí quiero configurarlo de esa manera).

editar:

Estoy buscando en la fuente SqlMapper de Dapper y encontré:

 private static IEnumerable<T> QueryInternal<T>(params) // my knowledge of generics is limited, but how does this work without a where T : object?
 {
   ...
   while (reader.Read())
   {
     yield return (T)func(reader);
   }
   ...
 }

así que aprendí dos cosas después de encontrar esto. Lea en Func y lea en rendimiento (nunca antes utilizado). Supongo que necesito pasar reader.Read () a otra función (que comprueba los encabezados de las columnas y los inserta en los objetos de forma adecuada) y rendimiento devolver eso?

Respuesta aceptada

Puede cambiar su declaración de selección para trabajar con alias como "SELECT [Column("GBBRSH")] AS Gibberish" y proporcionar una asignación entre el nombre del atributo y el nombre de la propiedad poco.

De esta forma, Dapper llenaría las propiedades coincidentes, ya que solo requiere que su POCO coincida con el nombre exacto de la columna.



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