Как получить вставленный идентификатор строки с помощью WebMatrix - PullRequest
0 голосов
/ 13 октября 2011

В WebMatrix существует метод GetLastInsertId . Однако, используя Reflector, я вижу, что он реализован так:

[return: Dynamic]
public object GetLastInsertId()
{
    return this.QueryValue("SELECT @@Identity", new object[0]);
}

Что, насколько я вижу, является очень плохим способом сделать это, потому что @@Identity возвращает последнюю вставку с учетом каждой таблицы и каждого сеанса. Мне нужно, чтобы это ограничивалось областью действия и сеансом, с которым я работаю, поэтому я ожидал, что это будет использовать SELECT SCOPE_IDENTITY(), так как это также, по-видимому, то, что чаще всего используется согласно моим прочтениям.

Мои вопросы:

  1. Обертки WebMatrix делают что-то, что позволяет использовать это в моем случае?
  2. Если нет, есть ли простой способ получить вставленный идентификатор запроса на вставку, используя классы WebMatrix, или я должен прибегнуть к таким вещам, как SqlClient для этого?

Меня интересуют ответы для SQL Server (не компактные), если это имеет значение.

Ответы [ 3 ]

1 голос
/ 25 февраля 2013

У меня была та же проблема, и я прочитал эти ответы, но все еще не мог заставить код работать правильно. Возможно, я неправильно истолковывал решения, приведенные выше, но мне показалось, что сработало следующее:

  var db=Database.Open(...);
  var lastInsertID = db.QueryValue("INSERT name into Names; SELECT SCOPE_IDENTITY()");
1 голос
/ 03 февраля 2014

вот мое решение

var db.Database.open('..');
var lastId = db.GetLastInsertId(); 
1 голос
/ 13 октября 2011

Цитируя Дэвид Фаулер , один из разработчиков API данных в WebMatrix: «[SCOPE_IDENITTY] не работает на ce». Поскольку нам нужен API данных, который работал бы как на CE, так и на обычном SQL Server, мы использовали @@ Identity. Поэтому, если вы хотите использовать SCOPE_IDENTITY специально, вы должны использовать метод db.QueryValue:

var db = Database.Open(...);
db.Insert(...);
var lastInsertId = db.QueryValue("SELECT SCOPE_IDENTITY()")
...