dapper c#を使用してリストオブジェクトを塗りつぶす

c# dapper fill list object

質問

私はこのように私のデータベースに2つのテーブルがあります:

ここに画像の説明を入力

私はこのクラスを持っています:

   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>();

記事のリストを作成し、 dapperを使用してクエリを作成します。私は記事の名前ではなく、関連EAN記事のリストにこのリストを記入したいと思います。私はこのクエリをしようとします:

SELECT ART.ID AS ID, ART.NAME AS NAME,EAN.EAN AS BARCODE
FROM ART,EAN
WHERE ART.ID = EAN.ID_ART;

そしてC#で。

arts = conn.Query<Article>(query, null, transaction).ToList();

しかし動作しません。私はどうすればいいですか?ありがとうございました..ご提案は大歓迎です。

受け入れられた回答

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);

重要な点Dapperは、主キーが異なる場合や、 "Id"以外の場所でワイド行を分割する場合は、オプションのsplitOnパラメータを使用して、ID列の名前が "Id"または "id"であることを前提としています。


人気のある回答

これを試して、私はそう思うだろう

arts = conn.Query<Article>(query).ToList();

また、以下のようにクエリを変更する必要があります。

SELECT ART.ID AS [Id], ART.NAME AS [Name],EAN.EAN AS [BarCode] 
FROM ART,EAN
WHERE ART.ID = EAN.ID_ART;


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow