Как получить последний вставленный идентификатор в пользовательском sql-выражении Linq To Sql? - PullRequest
1 голос
/ 03 августа 2009

Вот моя проблема. Я хотел бы получить последний вставленный идентификатор с пользовательским выражением sql в Linq To Sql.

Мой метод вставки:

public int Add(string Label)
{
    _dbContext.ExecuteCommand("INSERT INTO Products (Label) VALUES (@Label);", Label);

    _dbContext.SubmitChanges();

    var lastId = _dbContext.ExecuteQuery<int>("SELECT Scope_Identity() as [Scope_Identity];").ToList()[0];

    return  lastId;
}

lastId всегда возвращает ноль. Когда я попробовал этот запрос (Insert + Select) непосредственно в Sql Server, он отлично работает и возвращает последний вставленный идентификатор. Я не хочу использовать процедуру и не могу использовать новый объект Product (я не могу использовать InsertOnSubmit или что-либо еще).

Не могли бы вы мне помочь? Спасибо.

Ответы [ 3 ]

1 голос
/ 05 августа 2009

Хорошо, я нашел, как это сделать:

public int Add(string Label)
{
   var query = String.Format("INSERT INTO Products (Label) VALUES (@Label); SELECT ProductId FROM Products WHERE ProductId = Scope_Identity();", Label);

   var lastId = _dbContext.ExecuteQuery<int>(query).ToList()[0];

   return  lastId;
}
0 голосов
/ 27 марта 2012

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

public int Add(string Label)
{
    var query = String.Format("INSERT INTO Products (Label) VALUES (@Label);", Label);
    _dbContext.ExecuteCommand(query);
    var lastId = _dbContext.ExecuteQuery<int>("SELECT IDENT_CURRENT('Products ')").First();


    return  lastId;
}
0 голосов
/ 03 августа 2009

Попробуйте использовать:

INSERT INTO Products (Label) OUTPUT inserted.ProductID VALUES (@Label);

Rob

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...