【问题标题】:Dapper get error when Join between tablesDapper 在表之间连接时出错
【发布时间】:2021-01-22 17:18:31
【问题描述】:

我是 dapper 新手,当我从连接表中检索数据时出现错误

var qry = @"SELECT Cities.Id,
                           Cities.Name,
                           Cities.Sort,
                           Countries.Name
                           FROM[dbo].[Cities]
                            JOIN Countries ON Countries.Id = Cities.CountryId";

var result = con.Query<Cities, Countries>(qry);

这是错误信息

“SqlConnection”不包含“Query”的定义,也没有 扩展方法“查询”接受类型的第一个参数 可以找到“SqlConnection”(您是否缺少 using 指令或 程序集参考?)

Error Image

【问题讨论】:

  • 您确定添加了 Dapper 作为对您项目的引用吗?
  • 要么完全没有引用 Dapper,要么你错过了源文件顶部的 using Dapper
  • 是的,我添加了这个语句(使用 Dapper;)
  • 我相信没有Query 的重载,它接受两个 泛型类型参数和一个字符串查询。存在的需要从两种类型到一种的映射。
  • @wiktorZychla 有multi-mapping 支持。如果没有,就会有一个不同的例外。

标签: asp.net asp.net-core dapper asp.net-core-1.0


【解决方案1】:

错误是由无效调用引起的 - 没有接受 两个 泛型参数的重载。

尽管 Dapper 支持多映射事件,但调用实际上需要三个通用参数,TFirstTSecondTReturn(其中 TReturn 可以是这两种类型之一或另一种类型)。

https://github.com/StackExchange/dapper-dot-net#multi-mapping

来自文档的有效调用示例

var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post;});

只有两个通用参数的无效调用会产生您收到的错误消息。

我猜你要么想要接受单个泛型参数的第三个重载

 Query<TResult>( string sql, Type[] types, Func<object[], TResult> map, ... );

或接受三个的第四个

 Query<TFirst, TSecond, TResult>( string sql, Func<TFirst, TSecond, TResult> map, ... );

在这两种情况下,您仍然需要一个地图功能。

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2021-01-30
    • 2023-01-18
    相关资源
    最近更新 更多