Используйте Dapper.Contrib с наследованием - PullRequest
0 голосов
/ 02 июля 2018

При попытке использовать методы Contrib CRUD в объекте, где свойства находятся в унаследованном объекте, я получаю

У объекта должно быть хотя бы одно свойство [Key] или [ExplicitKey]

ошибка. Вот упрощенная версия моих объектов:

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

и это

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

Я получаю ошибку при выполнении:

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

Если я удаляю наследование и перемещаю метод Delete () в объект Product, он работает безупречно.

Есть идеи?

1 Ответ

0 голосов
/ 02 июля 2018

Ваш BaseObject не связан ни с одной таблицей, поэтому вызов Delete() для него не может быть понят Dapper.

Я думаю, что в вашем случае я бы просто использовал метод расширения:

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