Возврат одного параметра как часть запроса на множественное сопоставление

У меня есть сценарий, в котором мне нужно вернуть один столбец как часть запроса с несколькими картами в Dapper.

Я упростил приведенный ниже пример, но, по сути, значение одного столбца (int), которое я хочу получить, не является свойством класса Post (но находится в таблице базы данных).

Я хочу получить это значение самостоятельно, чтобы использовать его способом, аналогичным следующей строке из примера, где статус - это рассматриваемое значение int:

post.SetSomeStatus(status);

Вот пример кода:

  var sql = 
    @"select *, p.Status from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

Я вижу следующую ошибку с этим кодом: Индекс был за пределами массива.


person Bradley Braithwaite    schedule 04.12.2012    source источник


Ответы (1)


Причина ошибки: Индекс находился за пределами массива из-за того, что Dapper разбивал сегменты ответа на запрос, чтобы распределить их между возвращаемыми параметрами Post, User и int в этот пример. Соглашение Dapper заключается в разделении по идентификатору поля или предоставлении собственных правил для разделения набора результатов с помощью параметра splitOn.

Чтобы приведенный выше пример работал:

  var sql = 
    @"select *, p.Status AS ID from #Posts p 
    left join #Users u on u.Id = p.OwnerId
    Order by p.Id";

    var data = connection.Query<Post, User, int, Post>(sql, (post, user, status) => { 
        post.Owner = user;
        post.SetSomeStatus(status);
        return post;
    });

    var post = data.First();

Я нашел еще один вопрос, который также помог мне: Правильное использование Multimapping в Dapper

person Bradley Braithwaite    schedule 04.12.2012