string query = @"SELECT
m.*,
g.*
FROM
Movie m
INNER JOIN
MovieGenre mg on mg.MovieId = m.Id
INNER JOIN
Genre g on mg.GenreId = g.Id";
위의 table 에 맞게 model 을 구성합니다.
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Movie
{
public int Id { get; set; }
public string Name { get; set; }
public int Year { get; set; }
public List<Genre> Genres { get; set; }
}
controller 에서 dapper 를 활용하여 쿼리 구문에 맞게 model 에 담아 generic list 배열형태로 반환 받습니다.
using Dapper;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web.Mvc;
using WebApplication2.Models;
using (var connection = new SqlConnection(
"Password=xxx;Persist Security Info=True;User ID=xx;Initial Catalog=xx;Data Source=."))
{
connection.Open();
string query = @"SELECT
m.*,
g.*
FROM
Movie m
INNER JOIN
MovieGenre mg on mg.MovieId = m.Id
INNER JOIN
Genre g on mg.GenreId = g.Id";
var lookup = new Dictionary<int, Movie>();
connection.Query<Movie, Genre, Movie>(query, (m, g) =>
{
Movie movie;
if (!lookup.TryGetValue(m.Id, out movie))
lookup.Add(m.Id, movie = m);
if (movie.Genres == null)
movie.Genres = new List<Genre>();
movie.Genres.Add(g);
return movie;
}).AsQueryable();
var movies = lookup.Values.ToList();
return View(movies);
}
lookup.Values.ToList() 결과값을 조사식으로 화면 캡쳐한 내용입니다. view단에서 foreach 구문을 활용하여 출력이 가능합니다.