将Dapper.Contrib与继承一起使用

时间:2018-07-02 16:22:20

标签: c# dapper dapper-contrib

当尝试在属性位于继承对象中的对象中使用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 :(得分:1)

您的BaseObject未链接到任何表,因此Dapper无法理解对其调用Delete()

我认为在您的情况下,我只会使用扩展方法:

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