回答

收藏

Dapper.SimpleCRUD插入/更新/获取失败并显示消息``实体必须至少具有一个[Ke

技术问答 技术问答 124 人阅读 | 0 人回复 | 2023-09-12

我在达珀(Dapper)刚出生CRUD操作与Dapper和Dapper.SimpleCRUD lib合并。这是示例代码…; R/ o7 [% d7 h+ b
我的数据模型看起来像
# d$ ^( S# U% w. T$ l4 l" g& bClass Product{  public string prodId {get;set;}  public string prodName {get;set;}  public string Location {get;set;}}Dapper实施-插入
, O+ ?  p+ _1 b! T% T6 ?" Cpublic void Insert(Product item){    using(var con = GetConnection()con.Insert(item);   由于Db中的ProdId是身份列,所以它失败了。它是如何表现出来的?ProdId是DB中间的标志列?: i, E4 b# _/ a" g" e' J
Dapper实施-获取
+ T) h; L) m  X; p; y: a& B2 Qpublic IEnumerable GetAll()()(()()()()(                      )IEnumerable item = null;        using (var con = GetConnection())                                          item = con.GetList();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;return item;}它给出了一个例外:' Q; E# ^) }: L4 a0 H
实体必须至少有一个[Key]属性”!- |1 n/ O7 z. U  I0 r
                                                                ! t( @5 r/ _+ Q/ y' f: w$ w
    解决方案:                                                               
" O3 z2 t' `) ^" \                                                                这种情况发生的原因是你使用它Dapper扩展程序已经实现InsertCRUD扩展方法。理想情况下,可以使用简单的方法来实现
9 r% u2 S( H8 h3 |con.Execute
0 E! O4 M- U6 z2 G" b( H在Dapper然而,由于您想通过扩展名自动传递一个对象并创建一个插入查询,您需要帮助它理解它。它是给定产品实体的主键。因此,以下修改将有助于:6 W5 N5 f! [  F" @! Q; ~$ _
[Key]public string prodId {get;set;}其中Key属性应在中Dapper Extension或中实现Component Model。" A# y' q- n* g/ n9 I2 D
或者,你可以重命名prodId为Id,这将自动使其成为密钥。检查以下链接,您可以为实体创建一个单独的映射器来定义密钥,无论您使用哪种情况
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则