当尝试在属性位于继承对象中的对象中使用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对象中,那么它将正常工作。
有什么想法吗?
答案 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);
}
}
}