심재운 블로그

728x90
반응형


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 구문을 활용하여 출력이 가능합니다.


728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band

본문과 관련 있는 내용으로 댓글을 남겨주시면 감사하겠습니다.

비밀글모드

loading