和 Dapper 一起玩,到目前为止我对结果非常满意 - 很有趣!
但是现在,我的下一个场景是从两个表中读取数据——一个表Student
和一个Address
表。
Student
表有一个主键StudentID (INT IDENTITY)
,Address
有一个AddressID (INT IDENTITY)
。Student
还有一个称为AddressID
链接到Address
表的 FK。
我的想法是创建两个类,每个表一个,具有我感兴趣的属性。此外,我在 C# 中的类中放置了一个类型的PrimaryAddress
属性。Address
Student
然后,我尝试在单个查询中同时检索学生和地址数据——我模仿了Github 页面上给出的示例:
var data = connection.Query<Post, User>(sql, (post, user) => { post.Owner = user; });
var post = data.First();
在这里,aPost
和 aUser
被检索,并且帖子的所有者设置为用户 - 返回的类型是 a Post
- 对吗?
因此,在我的代码中,我为通用Query
扩展方法定义了两个参数——aStudent
作为第一个应该返回的参数,anAddress
作为第二个参数,它将存储到学生实例中:
var student = _conn.Query<Student, Address>
("SELECT s.*, a.* FROM dbo.Student s
INNER JOIN dbo.Address a ON s.AddressID = a.AddressID
WHERE s.StudentenID = @Id",
(stu, adr) => { stu.PrimaryAddress = adr; },
new { Id = 4711 });
问题是 - 我在 Visual Studio 中遇到错误:
使用通用方法 'Dapper.SqlMapper.Query(System.Data.IDbConnection, string, System.Func, dynamic, System.Data.IDbTransaction, bool, string, int?, System.Data.CommandType?)' 需要 6 个类型参数
我真的不明白为什么 Dapper 坚持使用这个带有 6 个类型参数的重载......