2010-08-31 2 views
1

Я думаю, что этот вопрос был сделан раньше, но я не нашел ясного ответа. Я перенесла базу данных SQl Server 2005 в oracle 11. Я использую дозвуковой 2.1. Мне удалось создать все классы уровня данных и создать все хорошо. Но проблема возникает, когда я пытаюсь сделать вставку в базе данных: у Oracle нет автоинкремента в первичном ключе, если вы не определяете последовательность и триггер. В результате Subsonic определяет все методы Insert в контроллере с столбцом id. Есть ли способ избежать дозвукового не генерировать методы Insert с столбцом id, который я собираюсь сгенерировать с помощью триггера и последовательности?Проблема автоинкремента Subsonic Oracle

спасибо

SToledo

UPDATE я наконец сделал ужасный хак (мне стыдно) в дозвуковом 2.1 исходного кода. Я изменил OracleDataProvider, чтобы установить идентификационные столбцы с идентификатором, чтобы быть автоинкрементами в true. Затем шаблон будет вести себя так, как я ожидаю. Я знаю, это ужасный взлом, но он работает для меня. Спасибо за помощь.

ответ

0

Не знаю, о дозвуковых, но если количество таблиц является относительно небольшим, вы можете изменить ДО-INSERT триггер, чтобы отключить проверку дефектности:

CREATE OR REPLACE TRIGGER trig_BI 
    BEFORE INSERT 
    ON tab_name 
    FOR EACH ROW 
BEGIN 
    --IF :NEW.key_column IS NULL 
    --THEN 
     SELECT tab_seq.NEXTVAL INTO :NEW.key_column FROM DUAL; 
    --END IF; 
END; 
+0

Спасибо за ответ, Alekxander. Я буду применять ваши советы. Тем не менее, меня больше всего беспокоила генерация кода в SubSonic (.NET ORM), чем триггер оракула, который хорошо работает Я попытаюсь найти решение самостоятельно. Все равно спасибо Sergio – SToledo