我在项目中使用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列?
你的第二种看法是正确的。默认情况下,Dapper映射在约定上。 MyData
类中的属性名称和列名称应相同,以便Dapper可以正确映射。
所以,你的MyData
类应该是这样的:
class MyData
{
string col1...
int col2...
}
如果您的属性名称必须不同,则需要修改查询以使用列别名,如下所示:
SELECT col1 AS MyProperty1, col2 AS MyProperty2 FROM Table1
另请注意,在复杂查询/映射的情况下,您的表名应与您的POCO / Entity类的名称匹配。
有一些方法可以覆盖默认映射。有关Dapper映射的详细讨论,请参阅this问题。