No Oracle não temos o @@IDENTITY que nos possibilita saber exatamente o código do registro que acamos de inserir, dessa forma é possivel salvar relacionamentos da seguinte forma:

Parent objParent = new Parent();
objParent.Name = "Big Dad";
objParent.Save();

Child objChild = new Child();
objChild.Name = "Good Child";

//
// Aqui esta o segredo, após salvar o objeto
// o Id é automaticamente definido de volta para o objeto.
//
objChild.ParentId = objParent.ParentId;
objChild.Save();

Esta implementação é nativa do Paulovich.Data, quando o banco é o SQLServer, porém no Oracle precisamos criar uma sequência para simular o comportamento do @@IDENTITY. Veja abaixo um exemplo de como criar uma sequência:

Create sequence NomeDaSequencia
increment by {A}
start with {B}
maxvalue {C} or minvalue {D}
cycle
cache {E};

Os parâmetros são os seguintes:

* NomeDaSequencia : Nome da sequência, não podendo ser o mesmo de uma tabela ou view.
* {A} : Especifica de quanto será o incremento ou decremento. (Valor padrão 1).
* {B} : Especifica o primeiro número a ser gerado. (Valor padrão 1).
* {C} : Especifica o valor máximo que a seqüência gerada pode atingir. O padrão é nomaxvalue, indo até 1027.
* {D} : Especifica o valor mínimo para as seqüências que estiverem sendo decrementadas. É mutuamente exclusiva ao maxvalue.
* Cycle | nocycle : Indica que ao atingir o valor máximo a numeração continuará a partir do valor inicial. (Valor padrão nocycle).
* {E} : Especifica quantos valores o Oracle pré-aloca e mantém em memória. (Valor padrão 20).

Veja como ficaria uma sequência para nosso objeto Parent:

create sequence SequenceParentId
increment by 1
start with 10
maxvalue 999
nocycle;

Agora para informar à Classe que usaremos a sequência adicionamos um parâmetro no PrimaryKeyField.

PrimaryKeyField(IsIdentity = true, Sequence = "SequenceParentId")
public int ParentId { get; set; }

Pronto! Seu projeto Oracle está pronto para ir ao ar. Para outras informações sobre a persitência de relacionamentos clique aqui.

Last edited Mar 9, 2010 at 2:43 PM by ivanpaulovich, version 1

Comments

No comments yet.