Ⅰ. はじめに
タイトルの通り「Dapperで複数テーブルをクラスにマップする方法」です。
Ⅱ. サンプルテーブル定義
usersテーブル
id | name |
1 | user001 |
2 | user002 |
3 | user003 |
tagsテーブル
id | user_id | name |
1 | 1 | tag001 |
2 | 2 | tag002 |
Ⅲ. サンプルプログラム
Program.cs
using Dapper; using MySqlConnector; var connectionString = "userid=YOUR_USER;password=YOUR_PASS;database=YOUR_DB;Host=YOUR_HOST"; using var conn = new MySqlConnection(connectionString); conn.Open(); var parameters = new DynamicParameters(); var sql = """ select u.*, t.* from users u left outer join tags t on u.id = t.user_id """; var userInfos = conn.Query<User, Tag?, UserInfo>( sql, (user, tag) => new UserInfo { UserId = user.Id, UserName = user.Name, TagName = tag?.Name }, parameters, splitOn: "id") .ToArray(); foreach (var x in userInfos) { Console.WriteLine($"{x.UserId}, {x.UserName}, {x.TagName}"); } class User { public required uint Id { get; set; } public required string Name { get; set; } } class Tag { public required uint Id { get; set; } public required uint UserId { get; set; } public required string Name { get; set; } } class UserInfo { public required uint UserId { get; set; } public required string UserName { get; set; } public required string? TagName { get; set; } }
実行結果
1, user001, tag001 2, user002, tag002 3, user003,