Re: Entiy Framework и "правильный" primary key
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.08.09 03:36
Оценка: 1 (1)
Здравствуйте, VintVV, Вы писали:

VVV>Задача кажется довольно простая, но я ни как не могу сделать....


VVV>Есть таблица в БД, у нее один PK = ID, в тригере на befor insert в эту таблицу поставлен

VVV>автоинкремент поля ID. Триггер:

VVV>CREATE OR ALTER TRIGGER MODULE_BI FOR MODULE

VVV>ACTIVE BEFORE INSERT POSITION 0
VVV>AS
VVV>BEGIN
VVV> IF (NEW.ID_MODULE IS NULL) THEN
VVV> NEW.ID_MODULE = GEN_ID(GEN_MODULE_ID,1);
VVV>END

VVV>Сделал маппинг таблицы в EF, вызываю статический метод ObjectContext для создания

VVV>данного объекта, а он зараза требует ID.... но как я узнаю текущее значение генератора
VVV>для определения этого уникального ID.

VVV>Можно было бы конечно взять максимальный ID из всего набора и для нового элемента увеличивать его,

VVV>но где гарантия что этот ID >= значению генератора, ведь вставлять может не только данная прога

VVV>ПОМОГИТЕ!

Может быть, применить такой трюк:
1. Исправить триггер вот так:
CREATE OR ALTER TRIGGER MODULE_BI FOR MODULE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID_MODULE IS NULL) OR (NEW.ID_MODULE < 0) THEN
        NEW.ID_MODULE = GEN_ID(GEN_MODULE_ID,1);
END

2. В программе использовать "локальный генератор ID", который начинает с -1 и дальше уменьшает номера вниз.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.