Как использовать Dapper со сложными запросами SQL
У меня есть две таблицы User(id, name, surname, FK_id_adress) и таблица Adress (id, city ,street, house, apartament), при регистрации пользователя нужно создать его адрес и самого юзера, я не понимаю как сделать это в одном запросе, фронтенд делаю на React.
using (var conn = new NpgsqlConnection(DataContext.ConnectionString)
{
conn.Open();
string sql = "Insert into User" +
"Values @";
return await conn.ExecuteAsync(sql, user);
}
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
Если я правильно понимаю, что таблицы связываются по полю id, то
WITH cte AS (
INSERT INTO User(name, surname, FK_id_adress)
VALUES ( @1, @2, @3 )
RETURNING id
)
INSERT INTO Address (id, city, street, house, apartament)
SELECT id, @4, @5, @6, @7
FROM cte;
где @N - отдельный параметр номер N в списке значений для (name, surname, FK_id_adress, city, street, house, apartament).
И да, параметры придётся передавать поштучно.
Впрочем, возможна и такая форма:
WITH
cte1 (x1, x2, x3, x4, x5, x6, x7) AS (
SELECT @
),
cte2 AS (
INSERT INTO User(name, surname, FK_id_adress)
SELECT x1, x2, x3 FROM cte1
RETURNING id
)
INSERT INTO Address (id, city, street, house, apartament)
SELECT cte2.id, cte1.x4, cte1.x5, cte1.x6, cte1.x7
FROM cte1
CROSS JOIN cte2;
В этом случае параметры можно передавать кортежем.