Dapper Nested Object mapping

In the past years I have used ORM (Object Relational Mapping) tools, such as Entity Framework, a lot. But recently started to use Dapper in a daily basis. For simple queries it’s really easy to implement it and it’s really fast. After all, the implementation as same as plain ADO.Net implementation only more easy and flexible.

It’s a trivial task to retrieve nested objects with a single query when using Entity Framework. To perform the same task with Dapper is a little bit tricky but still not impossible.

Let’s think about having a 2 tables called Posts and Categories as follow;

List of Posts with Category name requires a n-1 relation between those tables. Nested objects within n-1 or 1-1 relations more easy to retrieve;

using (var conn = new SqlConnection(_connectionString))
{
    var query = @"SELECT P.Id
                        , P.Title
                        , P.Content
                        , C.Id
                        , C.Name
                    FROM Posts AS P
                    INNER JOIN Categories AS C on P.CategoryId = C.Id";

    var result = await conn.QueryAsync<Post, Category, Post>(query, (p, c) =>
    {
        p.Category = c;
        return p;
    });

    return result.AsList();
}

Let’s make it a little bit more challenging and assume that, we want to retrieve list of Categories with related Posts as nested collection. The relationship between tables 1-n which requires additional lookup dictionary. Otherwise it will resulted with duplication.

using (var conn = new SqlConnection(_connectionString))
{
    var query = @"SELECT C.Id
	                , C.Name
	                , P.Id
	                , P.Title
	                , P.Content
                FROM Categories AS C
                INNER JOIN Posts AS P on P.CategoryId = C.Id";

    var lookup = new Dictionary<int, Category>();

    var result = await conn.QueryAsync<Category, Post, Category>(query, (c, p) => 
    {
        if (!lookup.TryGetValue(c.Id, out Category category))
            lookup.Add(c.Id, category = c);

        if (category.Posts == null)
            category.Posts = new List<Post>();

        category.Posts.Add(p);

        return category;
    });

    return result.AsList();
}
This entry was posted in Dapper. Bookmark the permalink.

0 Responses to Dapper Nested Object mapping

  1. Your comment is awaiting moderation.

    Несмотря на тот факт, что контора букмекерская 1xbet содержит реальную лицензию и зарегистрирована на Кюрасао, Нидерландских Антильских островах, в РФ ее вебсайт постоянно блокируется. Но пользователей конторы это не должно беспокоить, так как управление компании предприняло соответствующие шаги в правильном направлении, обеспечив собственным посетителям реальность прохода на портал когда угодно, пусть даже при условии блокировки главного ресурса 1xbet. Причины блокирования вебсайта В Рф принят закон, который ограничивает или воспрещает активность букмекерских компаний, какие не выполняют последующие условия: Реальная процедура регистрации на территории РФ, получение разрешения и оплата налогообложения в бюджет. Вход в состав СРО. Так как БК уже имеет международную лицензию, ее субъекты посчитали нормативы страны завышенными, за это подвергалась блокировке. За прошедшие 3 года функционирования 1xbet на территории Российской Федерации по заключению судебного органа оказалось заблокировано более 500 доменных имен. Но это не препятствует компании продолжать деятельность, а ее клиентам пользоваться абсолютно всеми разделами ресурса, ставить и выигрывать деньги. Как зайти на блокированный портал Чтобы обойти блокирование, представители фирмы предоставляют всем своим игрокам вход к зеркалам 1xbet. Зайти на функционирующую сборку сайта возможно посредством гиперссылки 1xbet зеркало сегодня прямо сейчас. Это удобный и простой способ пользования букмекерской конторой. Во время использования рабочего зеркала сохраняются абсолютно все личные сведения, в том числе счета и учетка, к тому же зеркало точно копирует официальный портал. Он настолько же качественно предохранен и полностью безопасен для выполнения ставок, ввода и вывода денежных средств. Зеркало блокированного главного проекта – наиболее удобный способ продолжения проведения ставок без мизерного риска и хлопот.

Leave a Reply

Your email address will not be published. Required fields are marked *