Вставьте Guid и получите значение с помощью dapper

Я пытаюсь вставить запись в свою базу данных и получить только что добавленный GUID.

Скажем, если у меня есть таблица с 3 столбцами, GUID, FirstName, LastName, Мне нужно вставить новую запись, а затем вернуть только что созданный GUID. Проблема в том, что имя и фамилия часто дублируются. Я не совсем уверен, как это сделать

Вот что я попробовал, я знаю, что нижеприведенное не сработает, так как я не говорю, какой столбец выбрать, и я не уверен, как это сказать:

var query = @"INSERT INTO MyTable(GUID, FirstName, LastName)
                  SELECT
                      @GUID, @FirstName, @LastName);

using (var oConn = CreateConnection())
{
    var test = oConn.Query<string>(query, new
            {
                GUID = Guid.NewGuid(), 
                "John", 
                "Doe"
            }).Single();
}

Я получаю ошибку

Последовательность не содержит элементов

1 ответ

Решение

Если вам нужен только тот Guid, который вы вставили, почему бы не сохранить его в локальной переменной в вашем коде и использовать его по мере необходимости?

Я также вижу некоторые ошибки в вашем коде. Приведенный ниже код исправлен и должен работать.

var guid = Guid.NewGuid();
var query = @"INSERT INTO
              MyTable (GUID, FirstName, LastName) values ( @GUID, @FirstName,@LastName);";
using (var conn =  CreateConnection())
{
    conn.Execute(query, new {  @GUID = guid, @FirstName= "John", @LastName= "Scott" });
}
// You can use the value in guid variable now. It will be Id you inserted just now

Dapper Contrib требуется автоматически сгенерированный идентификатор, это не может быть GUID, и вы не можете передать предварительно сгенерированный Guid

Другие вопросы по тегам