DapperContrib - Actualización usando la clase abstracta

dapper dapper-contrib orm

Pregunta

Tengo una clase de bajo como esta:

public abstract class Document
{
[Dapper.Contrib.Extensions.Key]
public Int32 DoucmentID {get;set;}
public String Name {get;set;}
}

Luego tengo

public class Proposal : Document
{
   public String ProposalStuff {get;set;}
}

Ahora quiero escribir algún método genérico para manejar las actualizaciones usando Dapper.Contrib

// alguna clase en alguna parte ...

public bool Update<T> (T as item) where T : class
{
 using (var sqlConnection = new SqlConnection(_connectionString))
            {
                sqlConnection.Open();
                return sqlConnection.Update<T>(item);
            }
}

Ahora quiero actualizar el objeto:

   public bool UpdateProposal(Repository.Proposal prop)
   {
            return orm.UpdateItem<Repository.Proposal>(prop);
   }

Dapper.Contrib me da este mensaje:

{"La entidad debe tener al menos una propiedad [Key] o [ExplicitKey]"}

No puedo encontrar un ejemplo usando una clase base abstracta. Pensé que tal vez el tipo de UpdateProposal debería ser Document pero recibo el mismo mensaje.

Gracias por la ayuda. Estoy seguro de que es algo simple.

EDIT: he encontrado la mitad de la respuesta. Empecé a probar solo con una sola clase (sin resumen) y obtuve el mismo error. Después de más investigaciones:

Dapper.SimpleCRUD Insert / Update / Get falla con el mensaje "La entidad debe tener al menos una propiedad [Key]"

Descubrí que usar Key [Dapper.Contrib.Extensions.Key] puede resolver el problema. Sin embargo, parece que Key de ystem.ComponentModel.DataAnnotations también debería funcionar.

Si no, eso me pone un poco triste ya que cualquier servicio que quiera usar el ORM debería conocer a Dapper y esperaba evitar un mapeador.

Voy a intentar ahora y romper la clase nuevamente y ver si al menos resuelve el problema inmediato.

METRO.

Respuesta popular

Entonces, sí, después de todo, funciona bien con la clase abstracta, siempre que use la anotación Dapper Key vs. ComponentModel.

Puede ser que la Dapper Key sea solo lo que sea compatible. pero esa sería otra pregunta.

METRO.



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é