arul077 Ответов: 4

Как получить следующий идентификатор автоинкремента в linq


Мне нужно следующее значение автоматического приращения ... я использую базу данных Mysql... Мне нужны примеры запросов Linq

Что я уже пробовал:

SELECT `AUTO_INCREMENT` FROM  INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'distributorempanel_new' AND   TABLE_NAME   = 'temp_rate_objective_new')
.. этот запрос mysql работает нормально.... но мне нужен запрос Linq....

4 Ответов

Рейтинг:
2

OriginalGriff

Даже не пытайся. Это опасная игра: MySQL-это многопользовательская среда, поэтому вы никоим образом не можете гарантировать, что "следующее значение", которое вы получаете, будет доступно, когда вы захотите его использовать, поскольку другой пользователь, возможно, тоже взял его. И риски использования неправильного уникального значения ужасны: сортировка базы данных после того, как она была так искажена, - это очень неприятная и трудная ручная работа.
Извлекайте идентификатор только после того, как он был использован и назначен строке - никогда не пытайтесь получить его заранее, это только создаст вам проблемы.


arul077

что такое equalient в scope_identity() для Linq...?

Dave Kreskowiak

Такого понятия не существует.

Правильный способ сделать это-создать новую запись с хотя бы минимальными данными, необходимыми для сохранения записи в таблице, а затем автоматически вернуть идентификационный номер в сохраненный объект EF.

Maciej Los

5ed!

Jon McKee

Согласен со всем, что сказал Грифф :большой палец вверх:

Рейтинг:
0

Member 13706610

/* Начать Хранимую Процедуру */
Используйте [MyDatabase]
ГО

УСТАНОВИТЕ ANSI_NULLS НА
ГО
УСТАНОВИТЕ QUOTED_IDENTIFIER НА
ГО
Создайте процедуру [dbo].[My_StoredProcedure]
@VariableNum [int] = NULL,
@VariableDate [datetime] = NULL,
...
...
@Variable_Return_Id [int] вывод
С ПОМОЩЬЮ EXECUTE AS CALLER
АС
Начать
ВСТАВИТЬ В
Таблицы My_table(Var_Num ,
Var_Date ,
... ,
...

) Значения (@VariableNum ,
@VariableDate
....
....
)
SET @Variable_Return_Id = @@IDENTITY
Конец
/* Завершение Хранимой Процедуры */

Примечание : Вы должны создать эту хранимую процедуру в таблице данных SQL Server и добавить Visual studio project Linq dbml в My_StoredProcedure с выпадающим списком.
При вызове is My_StoredProcedure добавьте новую запись и верните идентификационный номер.

Пример C# :
int AddRec()
{
int num=1;
Параметре Dateval Датавремя = Датавремя.Сейчас.Дата;
int ResultId;
ResultId=My_StoredProcedure(num, DateVal);
return(ResultId);
}

Пример VB:
Функция AddRec() как целое число
Dim num как целое число = 1
Dim DateVal As DateTime = DateTime.Now.Дата
Dim ResultId как целое число
ResultId=My_StoredProcedure(num, DateVal)
AddRec=ResultId ' или Return ResultId
Конечная Функция


Рейтинг:
0

Member 13973021

Если используется LINQ, то получить новое значение, присвоенное столбцу Identity, очень просто. Вам не нужно вызывать эти многочисленные хранимые процедуры. У вас уже есть экземпляр объекта, который нужно добавить, а затем просто прочитайте свойство Id этого объекта после вызова DB. SaveChanges ().