Вложенные объекты в параметре Dapper Query - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть объект, подобный следующему, и я хотел бы отправить его в качестве параметра для Dapper-запроса.

var person = new {
    Name = "John",
    Company = new {
        Name = "ACME"
    }
};

var res = connection.Query("select concat(@Name, @Company_Name) as concatted", person);

Моя проблема в том, что @Company_Name не используется. Я попытался заменить его на @Company.Name, но это дало AggregateException с SystemNotSupportedException: The member Company of type ..... cannot be used as a parameter value.

Как правильно использовать вложенный объект переданного объекта param внутри запроса?

1 Ответ

1 голос
/ 28 февраля 2020

Вам нужно будет сопоставить имена параметров запроса в вашем объекте param:

 var res = conn.Query("select concat(@Name, @Company_Name) as concatted",
            new { person.Name, Company_Name = person.Company.Name });

Редактировать: Нет, вы не можете передать объект, как он есть, так как dapper делает очень прямолинейно sql -параметр в сопоставление параметров объекта.

Это должен быть либо тип: IDynamicParameters, IEnumerable<KeyValuePair<string, object>>, либо анонимный объект, значения параметров которого оцениваются на основе имени sql Параллельные литералы. Смотрите https://github.com/StackExchange/Dapper/blob/a18dc63c688b5173c5dde8b1243b74e26fa262c4/Dapper/SqlMapper.cs#L2367 о том, как это реализовано.

...