在C#中使用Dapper读取表的子集

问题描述 投票:1回答:1

我在项目中使用Dapper,如果我需要获得单个基本类型(int,decimal,string等)或任何db实体,这是可以的,但是我需要从表中只读取2列,我面对这里有很多挑战:

这是一个简单的查询:

SELECT col1, col2 FROM Table1

我希望收到字符串和int的地方

这是我在实现查询后读取数据的方式:

var field1 =  (await result.ReadAsync<string, int>()).FirstOrDefault();

这不可编辑。我试图创建包含2个字段的类:string和int并使用该类型而不是。因此,结果如下:

var field1 =  (await result.ReadAsync<MyData>()).FirstOrDefault();

class MyData
{
string...

int ...
}

它编译但我得到null为字符串和int的正确数据。

查询本身是正确的,我测试了它,没关系。所以问题是如何阅读2列?

c# dapper
1个回答
1
投票

你的第二种看法是正确的。默认情况下,Dapper映射在约定上。 MyData类中的属性名称和列名称应相同,以便Dapper可以正确映射。

所以,你的MyData类应该是这样的:

class MyData
{
    string col1...
    int col2...
}

如果您的属性名称必须不同,则需要修改查询以使用列别名,如下所示:

SELECT col1 AS MyProperty1, col2 AS MyProperty2 FROM Table1

另请注意,在复杂查询/映射的情况下,您的表名应与您的POCO / Entity类的名称匹配。

有一些方法可以覆盖默认映射。有关Dapper映射的详细讨论,请参阅this问题。

© www.soinside.com 2019 - 2024. All rights reserved.