Utilice Dapper.Contrib con herencia

c# dapper dapper-contrib

Pregunta

Cuando trato de usar los métodos CRUD de Contrib en un objeto donde las propiedades están en un objeto heredado, obtengo un

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

error. Aquí hay una versión simplificada de mis objetos:

public class BaseObject
{
    public string Delete()
    {
            using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString))
            {
                db.Delete(this);
            }
    }
}

y esto

public class Product: BaseObject
{
    [Key]
    public int id { get; set; }
    public string title { get; set; }
    public string name { get; set; }
}

Me sale el error cuando ejecuto:

Product product = new Product() {id = 1};
product.Delete();

Si elimino la herencia y muevo el método Delete () en el objeto Product, funciona sin problemas.

¿Algunas ideas?

Respuesta aceptada

Su BaseObject no está vinculado a ninguna tabla, por lo que Dapper no pudo entender la llamada a Delete() .

Creo que en su caso, simplemente usaría un método de extensión:

public static class BaseObjectExtensions
{
    public static string Delete<T>(this T theObject) where T : BaseObject
    {
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString))
        {
            db.Delete(theObject);
        }
    }
}


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é