Usa Dapper.Contrib con ereditarietà

c# dapper dapper-contrib

Domanda

Quando provo ad usare i metodi CRUD di Contrib in un oggetto in cui le proprietà sono in un oggetto ereditato, ottengo un

L'entità deve avere almeno una proprietà [Key] o [ExplicitKey]

errore. Ecco una versione semplificata dei miei oggetti:

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

e questo

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

Ottengo l'errore quando eseguo:

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

Se rimuovo l'ereditarietà e sposta il metodo Delete () nell'oggetto Product funziona perfettamente.

Qualche idea?

Risposta accettata

Il tuo BaseObject non è collegato a nessuna tabella, quindi chiamare Delete() su di esso non può essere compreso da Dapper.

Penso che nel tuo caso utilizzerei semplicemente un metodo di estensione:

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);
        }
    }
}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché