代码之家  ›  专栏  ›  技术社区  ›  adinas

将dapper.contrib与继承一起使用

  •  0
  • adinas  · 技术社区  · 6 年前

    当试图在属性位于继承对象中的对象中使用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 回复  |  直到 6 年前
        1
  •  1
  •   Maxwell77    6 年前

    你的 BaseObject 未链接到任何表,因此调用 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);
            }
        }
    }