今回は PetaPoco を使って 3 テーブルを JOIN してデータ取得してみる。
やはりテーブル定義などは Dapper のときと同じなので、そちらの記事を参照してほしい。
Dapper を使ってみる(その1)
Dapper を使ってみる(その2)
Dapper を使ってみる(その3)
3 テーブルを JOIN した場合のコードは以下のようになる。
変更内容は Dapper のときとほぼ同じである。
PetaPoco.cs を見てみると、4つまでのテーブルの JOIN をサポートしているようだ。Dapper が6つまでをサポートしているのでこの点は Dapper に軍配が上がる。5つ以上の JOIN をする場面はあまりないとは思うが。。。
以上。
やはりテーブル定義などは Dapper のときと同じなので、そちらの記事を参照してほしい。
Dapper を使ってみる(その1)
Dapper を使ってみる(その2)
Dapper を使ってみる(その3)
3 テーブルを JOIN した場合のコードは以下のようになる。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using PetaPoco; namespace PetaPocoTest1 { public partial class Form1 : Form { private string connectionString = "Data Source=(local);Database=ORMTest;User ID=ORMTest_user;Password=ORMTest_password"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var db = new PetaPoco.Database(connectionString, "System.Data.SqlClient"); var resultList = db.Query<Product, SubCategory, Category, Product>( (p, s, c) => { p.SubCategory = s; s.Category = c; return p; }, @"SELECT p.*, s.*, c.* FROM Product p INNER JOIN SubCategory s ON s.SubCategoryId = p.SubCategoryId INNER JOIN Category c ON c.CategoryId = s.CategoryId" ); dataGridView1.AutoGenerateColumns = false; dataGridView1.Columns.AddRange( new DataGridViewTextBoxColumn() { DataPropertyName = "ProductId", Name = "ProductId", }, new DataGridViewTextBoxColumn() { DataPropertyName = "Name", Name = "Name", }, new DataGridViewTextBoxColumn() { DataPropertyName = "Price", Name = "Price", }, new DataGridViewTextBoxColumn() { DataPropertyName = "SubCategoryId", Name = "SubCategoryId", }, new DataGridViewTextBoxColumn() { DataPropertyName = "SubCategoryName", Name = "SubCategoryName", }, new DataGridViewTextBoxColumn() { DataPropertyName = "CategoryName", Name = "CategoryName", } ); dataGridView1.DataSource = resultList.ToList(); } } public class Product { public int ProductId { get; set; } public string Name { get; set; } public int Price { get; set; } public int SubCategoryId { get; set; } public SubCategory SubCategory { get; set; } public string SubCategoryName { get { return SubCategory.Name; } } public string CategoryName { get { return SubCategory.Category.Name; } } } public class SubCategory { public int SubCategoryId { get; set; } public string Name { get; set; } public int CategoryId { get; set; } public Category Category { get; set; } } public class Category { public int CategoryId { get; set; } public string Name { get; set; } } }
変更内容は Dapper のときとほぼ同じである。
PetaPoco.cs を見てみると、4つまでのテーブルの JOIN をサポートしているようだ。Dapper が6つまでをサポートしているのでこの点は Dapper に軍配が上がる。5つ以上の JOIN をする場面はあまりないとは思うが。。。
以上。