Как получить последний идентификатор, введенный с помощью Dapper? - PullRequest
0 голосов
/ 19 марта 2019

Я запрашиваю БД Oracle и хотел бы вернуть введенный идентификатор.Я использую последовательность, которая автоматически генерирует следующий идентификатор для меня.Я уже пробовал это, но у меня есть исключение "Команда ORA-00933 sql неправильно завершена".В чем ошибка?Спасибо

public async Task<int> InsertSESSIONUSER_TAsync(SESSIONUSER_T obj)
    {
        string sql = "INSERT INTO SESSIONUSER_T (ID, USERNAME,PASSWORD,LOCALE,TIMEZONEID,EMAIL,CREATIONDATE, EMAILPEO) VALUES (USER_SEQUENCE.NEXTVAL,'TEMP',:PASSWORD,:LOCALE,:TIMEZONEID,:EMAIL,:CREATIONDATE,:EMAILPEO); SELECT CAST(SCOPE_IDENTITY() as int)";
        using (OracleConnection cnn = DBCConnectionFactory.Getconnection())
        {
            try
            {
                cnn.Open();
                int row = await cnn.ExecuteAsync(sql, obj);
                var result = await cnn.QueryAsync<int>(sql, obj);
                return result.Single();

            }
            catch (Exception ex)
            {
                ApplicationLogger.Logger.Error(ex, "InsertSESSIONUSER_TAsync");

            }
            finally
            {
                if (cnn?.State == System.Data.ConnectionState.Open)
                {
                    cnn.Close();
                }

            }
            return -1;
        }
    }

Ответы [ 3 ]

0 голосов
/ 19 марта 2019

Ваш SQL должен иметь 2 предложения. Вставка и выберите последний вставленный идентификатор. Это не зависит от СУБД, поэтому, например, в MySQL это будет выглядеть примерно так:

INSERT INTO <table> (...) VALUES (...); SELECT last_insert_id();

А на стороне приложения вам придется использовать метод расширения Dapper ExecuteScalarAsync. Например:

// ...
var lastId = await conn.ExecuteScalarAsync<long>("INSERT INTO <table> (...) VALUES (...); SELECT last_insert_id();");
0 голосов
/ 20 марта 2019

Пост решен! Я использовал транзакции, и все работало! ;)

0 голосов
/ 19 марта 2019
insert into your_table (...)
output INSERTED.(column name) 
values (...)
...