관리 메뉴

심재운 블로그

asp.net mvc 의 dapper 로 join 구문 model 에 담아보기 본문

닷넷관련/ASP.NET MVC & Core

asp.net mvc 의 dapper 로 join 구문 model 에 담아보기

재우니 2017.10.12 11:09


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


0 Comments
댓글쓰기 폼