在 C# 中使用 Dapper 读取表的子集
Posted
技术标签:
【中文标题】在 C# 中使用 Dapper 读取表的子集【英文标题】:Reading subset of the table using Dapper in C# 【发布时间】:2018-09-11 12:50:22 【问题描述】:我在项目中使用 Dapper,如果我需要获取单个原始类型(int、decimal、string 等)或任何 db 实体都可以,但我只需要从表中读取 2 列,我在这里遇到了很多挑战:
这是一个简单的查询:
SELECT col1, col2 FROM Table1
我希望收到字符串和整数的地方
这就是我在实现查询后读取数据的方式:
var field1 = (await result.ReadAsync<string, int>()).FirstOrDefault();
这是不可编译的。 我尝试创建包含 2 个字段的类:string 和 int 并使用该类型而不是 . 所以它导致以下更正:
var field1 = (await result.ReadAsync<MyData>()).FirstOrDefault();
class MyData
string...
int ...
它可以编译,但我得到字符串的 null 和 int 的正确数据。
查询本身是正确的,我测试过了,没问题。 那么问题是如何阅读这两列?
【问题讨论】:
我认为您想要的原始代码是ReadAsync<Tuple<string, int>>()
【参考方案1】:
您的第二种方法看起来是正确的。 Dapper 默认映射约定。 MyData
类中的属性名称和列名称应该相同,以便 Dapper 可以正确映射。
所以,您的 MyData
类应该如下所示:
class MyData
string col1...
int col2...
如果您的属性名称必须不同,您需要修改查询以使用如下所示的列别名:
SELECT col1 AS MyProperty1, col2 AS MyProperty2 FROM Table1
另请注意,在复杂查询/映射的情况下,您的表名应与您的 POCO/Entity 类的名称匹配。
有一些方法可以覆盖默认映射。关于 Dapper 映射的详细讨论请参考this question。
【讨论】:
以上是关于在 C# 中使用 Dapper 读取表的子集的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Dapper 从 SQL Server Image 字段中读取 blob 数据?