Dapper.SimpleCRUD 插入/更新/获取失败并显示消息 "Entity must have at least one [Key] property"

Dapper.SimpleCRUD Insert / Update / Get fails with message "Entity must have at least one [Key] property"

我是 Dapper 的新生。尝试将 CRUD 操作与 Dapper 和 Dapper.SimpleCRUD 库结合起来。这是示例代码...
我的数据模型看起来像

Class Product
{
  public string prodId {get;set;}
  public string prodName {get;set;}
  public string Location {get;set;}
}

Dapper 实施 - 插入

public void Insert(Product item)
{
    using(var con = GetConnection())
    {
      con.Insert(item);
    }
}

由于 Db 中的 ProdId 是标识列,因此失败。它如何指示 ProdId 是数据库中的标识列?

Dapper 实施 - 获取

public IEnumerable<Product> GetAll()
{
        IEnumerable<Product> item = null;
        using (var con = GetConnection())
        {
            item = con.GetList<Product>();
        }
        return item;
}

它给出了一个例外:

"Entity must have at least one [Key] property"!

发生这种情况是因为您使用的是 Dapper 扩展,它已实现 Insert CRUD 扩展方法。理想情况下,这可以使用 simple

来实现

con.Execute 在 Dapper 中,但是由于你想传​​递一个对象并通过扩展自动创建一个插入查询,你需要帮助它理解,这是给定产品实体的主键,以下修改将有所帮助:

[Key]
public string prodId {get;set;}

其中 Key 属性应在 Dapper ExtensionComponent Model 中实现。

或者您可以将 prodId 重命名为 Id,这将自动使其成为密钥。还要检查以下 link,您可以在其中为实体创建一个单独的映射器,从而定义密钥,无论您的情况如何

连接到 SQL Server 2016,当我忘记将主键附加到 [=17= 的 Id 列时,Dapper.Contrib 和 Dapper.SimpleCRUD 都出现了这个错误].

主键添加到 table,项目重建并发布以清除缓存,[Key] 和 [ExplicitKey](后者在 DapperContrib 中)都很好。