C# 从Dapper使用内部联接获取数据
我正在一个项目上进行数据库操作,并开发WinForms应用程序C,我正在使用Dapper从数据库中获取数据,我被困在需要使用内部连接检索数据的情况下。我有两张表格,作者和书如下:C# 从Dapper使用内部联接获取数据,c#,orm,dapper,micro-orm,C#,Orm,Dapper,Micro Orm,我正在一个项目上进行数据库操作,并开发WinForms应用程序C,我正在使用Dapper从数据库中获取数据,我被困在需要使用内部连接检索数据的情况下。我有两张表格,作者和书如下: public class Authors { public int AuthorId { get; set; } public string AuthorName { get; set; } } public class Book { public int BookId { get; set;
public class Authors
{
public int AuthorId { get; set; }
public string AuthorName { get; set; }
}
public class Book
{
public int BookId { get; set; }
public string AuthorId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Price { get; set; }
}
现在在SQL Server中,我可以使用以下查询轻松地从中获取数据:
select B.Title,b.Description,b.Price,A.AuthorName from author A inner join book B on A.AuthorId = B.Authorid
但我不知道如何使用dapper multi mapping实现这一点,我也看到过类似的文章,但无法理解它是如何工作和拆分的。如果我能用我的课堂设计得到同样的解决方案,我会很好。
谢谢
这是我想要的输出:根据链接的结果,您可以执行以下操作:
public class Result
{
public string Title { get; set; }
public string Description { get; set; }
public int Price { get; set; }
public string AuthorName { get; set; }
}
connection.Query<Result>("SELECT B.Title,B.Description,B.Price,A.AuthorName FROM Author A INNER JOIN Book B on A.AuthorId = B.Authorid");
也可以使用动态类型
如果你想和他们的作者一起收藏书籍,那就另当别论了。然后,出于示例的考虑,您希望选择*:
var sql = "SELECT * FROM Author A INNER JOIN Book B on A.AuthorId = B.Authorid";
var result = connection.Query<Book, Author, Book>(sql,
(b, a) => { b.Author = a; return b; }, splitOn: "AuthorId");
splitOn参数应该理解如下:如果所有列都按照查询中的顺序从左到右排列,那么左边的值属于第一类,右边的值属于第二类。您有没有一个基准测试显示LINQtoSQL和Entity Framework对于您的应用程序来说都太慢了?您希望得到什么结果?SQL中的值对或所有导航属性和集合都已填充的实体,但在您的模型中我看不到它们?@AluanHaddad请检查此链接@arekzyla我只想填充我的集合,我用我想要的结果更新问题。Thanks@Infii但是,您想拥有一个作者和图书类的集合,还是想要一些带有标题、描述、价格和AuthorName的DTO类?