Dapper.SimpleCRUD插入/更新/获取失败并显示消息"实体必须至少有一个[Key]属性"

时间:2015-10-21 16:45:31

标签: c# sql dapper dapper-extensions

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

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

Dapper Implementation - Insert

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

由于Db中的ProdId是标识列,因此失败。它如何表明ProdId是DB中的标识列?

Dapper Implementation - 获取

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

它给出了一个例外:

  

&#34;实体必须至少有一个[Key]属性&#34;!

2 个答案:

答案 0 :(得分:11)

这是因为您正在使用Dapper扩展,它已实现Insert CRUD扩展方法。理想情况下,这可以使用简单的

来实现 Dapper中的

con.Execute,但由于您希望传递一个对象并通过扩展自动创建插入查询,因此您需要帮助它理解,这是给定产品实体的主键,在修改之后应该帮助:

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

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

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

答案 1 :(得分:1)

连接到SQL Server 2016,Dapper.Contrib&amp; amp;当我忘记将主键附加到表的Id列时,Dapper.SimpleCRUD。

主键添加到表中,项目重建&amp;发布清除缓存,两者都很好[Key]&amp; [ExplicitKey](后者在DapperContrib中)。