2010-08-31 5 views
1

Je pense que cette question a déjà été posée, mais je ne trouve pas de réponse claire. J'ai migré la base de données SQl Server 2005 vers oracle 11. J'utilise subsonic 2.1. J'ai mangé pour créer toutes les classes de couche de données, et génère tout bien. Mais le problème se présente lorsque j'essaie de créer une insertion dans la base de données: Oracle n'a pas d'auto-incrémentation dans la clé primaire, sauf si vous définissez une séquence et un déclencheur. En conséquence, Subsonic définit toutes les méthodes d'insertion dans le contrôleur avec la colonne id. Y at-il un moyen d'éviter Subsonic ne pas générer des méthodes d'insertion avec la colonne id, que je vais générer en utilisant un déclencheur et une séquence?Problème d'auto-incrémentation Subsonic Oracle

Merci beaucoup

SToledo

MISE À JOUR J'ai finalement fait un horrible hack (je me sens honteux) dans le code source Subsonic 2.1. J'ai modifié OracleDataProvider pour définir les colonnes id-nommées à auto-incrément à true. Ensuite, le modèle se comportera comme je l'espère. Je sais que c'est un hack terrible, mais ça marche pour moi. Merci pour votre aide les gars.

Répondre

0

Je ne sais pas subsonique, mais si le nombre de tables est relativement faible, vous pouvez modifier déclencheur AVANT-INSERT pour désactiver l'enregistrement de nullité:

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

Merci pour la réponse, Alekxander. Je vais appliquer votre conseil. Cependant, j'étais plus préoccupé par la génération de code dans SubSonic (un. ORM ORM) que le déclencheur d'oracle, qui fonctionne bien Je vais essayer de trouver une solution par moi-même. Merci quand même Sergio – SToledo