使用Dapper C#填充列表对象

put*_*i26 3 c# list object fill dapper

我的数据库中有两个表,如下所示:

在此处输入图片说明

我有这个课:

   class Ean
   {
        public string Code{ get; set; }
   }

   class Article
   {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Ean> BarCode { get; set; }
   }

List<Article> arts = new List<Article>();
Run Code Online (Sandbox Code Playgroud)

我创建文章列表,并使用dapper进行查询。我想用文章的名称来填充此列表,还要用相关ean文章的列表来填充。我尝试执行以下查询:

SELECT ART.ID AS ID, ART.NAME AS NAME,EAN.EAN AS BARCODE
FROM ART,EAN
WHERE ART.ID = EAN.ID_ART;
Run Code Online (Sandbox Code Playgroud)

并在C#中。

arts = conn.Query<Article>(query, null, transaction).ToList();
Run Code Online (Sandbox Code Playgroud)

但是不行 我该怎么办?谢谢。欢迎任何建议。

Voi*_*Ray 5

看一下Dapper的多重映射功能。

Dapper允许您将单行映射到多个对象。如果您要避免不必要的查询和急切的负载关联,则这是一项关键功能。

例:

var sql = 
@"select * from #Posts p 
left join #Users u on u.Id = p.OwnerId 
Order by p.Id";

var data = connection.Query<Post, User, Post>(sql, (post, user) => { post.Owner = user; return post;});
var post = data.First();

post.Content.IsEqualTo("Sams Post1");
post.Id.IsEqualTo(1);
post.Owner.Name.IsEqualTo("Sam");
post.Owner.Id.IsEqualTo(99);
Run Code Online (Sandbox Code Playgroud)

重要说明Dapper假定您的Id列名为“ Id”或“ id”,如果您的主键不同或您想在“ Id”以外的其他位置拆分宽行,请使用可选的“ splitOn”参数。

  • 我认为这不是正确的答案,因为在此示例中 Owner 变量是 User 对象,而不是 List&lt;User&gt;。如何在对象中填充List?与此相反,如果“用户”对象中有一个“帖子”列表,我们如何填充帖子列表? (2认同)