Entity Framework - Создание автоинкрементации столбца - PullRequest
0 голосов
/ 07 октября 2011

Итак, я использую Entity Framework, и у нас есть модальная таблица TPM_PROJECTVERSIONNOTES. Эта таблица имеет столбец с именем NOTEID, который является числом. Прямо сейчас, когда мы создаем новую строку, мы получаем следующий доступный номер с этим кодом:

note.NOTEID = (from n in context.TPM_PROJECTVERSIONNOTES
               orderby n.NOTEID descending
               select n.NOTEID).Max() + 1;

Мне это кажется невероятно взволнованным (я имею в виду, что вам нужно выполнить целый SQL-запрос, чтобы получить следующее значение). Плюс, это невероятно опасно; это не потокобезопасно и не безопасно для транзакций. Я уже нашел 9 экземпляров в БД, которые имеют одинаковый NOTEID! Хорошо, что никто даже не подумал наложить на эту колонку УНИКАЛЬНОЕ ограничение ... вздох.

Так или иначе, я добавил новую последовательность в базу данных:

CREATE SEQUENCE TPM_PROJECTVERSIONNOTES_SEQ START WITH 732 INCREMENT BY 1;

Теперь мой вопрос:

Как мне указать платформе Entity использовать TPM_PROJECTVERSIONNOTES_SEQ.nextval при вставке строки в эту таблицу? По сути, я просто не хочу указывать NOTEID вообще, и я хочу, чтобы инфраструктура позаботилась об этом за меня. Было предложено использовать триггер, но я думаю, что это немного глупо, и, скорее всего, придется использовать платформу Entity, чтобы сначала создать правильный SQL. Для этого я использую Oracle 11g.

1 Ответ

0 голосов
/ 07 октября 2011

Хотя это все еще может попадать в то, что вы называете «хакерской» категорией, вы можете избежать использования триггеров для вызова nextval, но вы должны использовать хранимую процедуру для обработки вставки (в то время как она будет вызывать nextval вместо использования ТРИГГЕР). (Полагаю, это больше относится к категории TAPI / XAPI)

Ознакомьтесь с недавней статьей ТЕХНОЛОГИЯ: поставщик данных Oracle для .NET

он объясняет (и содержит примеры) использование хранимой процедуры для обработки вставки, вызова последовательности и отображения ее обратно в ODP EF BETA.

Очевидно, что бета-версия ODP EF не выполняет SQL для nextval, но это альтернатива. (посмотрите на этот форум, похоже, что большинство фреймворков EF Oracle становятся жертвами этого - devart etc {https://forums.oracle.com/forums/thread.jspa?threadID=2184372})

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