NHibernate + Fluent - Referência nula ou com chave estrangeira inválida
Recentemente esbarrei com uma situação de mapeamento de um banco de dados que possui uma tabela com um campo que é chave estrangeira com referência em outra tabela, só que esse valor pode não existir ou ser nulo.
Contextualizando a situação:
Tabela1
Campo1PK
Campo2
Campo3FK (ref. Tabela2)
Tabela2
Campo1PK (referência para o campo Tabela1.Campo3FK ou qualquer outra tabela)
Campo2
Até aí nada demais, mas então por um motivo ou outro o campo Tabela1.Campo3FK é do tipo "solto", ou seja, você pode colocar o valor que quiser que não há Integridade Referencial, ou seja, você coloca o código 4, quando não existe o registro em Tabela2.Campo1PK com mesmo código, mas não há nada que critique essa falta.
E aí, como mapear? O NHibernate numa situação dessa gerará/levantará uma exceção.
Simples, digamos que a classe/tipo de domínio da Tabela2 se chame Tabela2Type, então na sua classe de domínio Tabela1 existirá algo como:
Na classe de mapeamento (Fluent) haverá a seguinte configuração:
Sendo que .Nullable() será para aceitar valores nulos, e .NotFound.Ignore() considerará o caso de não existindo o valor seja ignorado não levantando uma exceção nesse caso.
Contextualizando a situação:
Tabela1
Campo1PK
Campo2
Campo3FK (ref. Tabela2)
Tabela2
Campo1PK (referência para o campo Tabela1.Campo3FK ou qualquer outra tabela)
Campo2
Até aí nada demais, mas então por um motivo ou outro o campo Tabela1.Campo3FK é do tipo "solto", ou seja, você pode colocar o valor que quiser que não há Integridade Referencial, ou seja, você coloca o código 4, quando não existe o registro em Tabela2.Campo1PK com mesmo código, mas não há nada que critique essa falta.
E aí, como mapear? O NHibernate numa situação dessa gerará/levantará uma exceção.
Simples, digamos que a classe/tipo de domínio da Tabela2 se chame Tabela2Type, então na sua classe de domínio Tabela1 existirá algo como:
public virtual Tabela2Type Tabela2 { get; set; }
Na classe de mapeamento (Fluent) haverá a seguinte configuração:
References(x => x.Tabela2, "Campo3FK").Nullable().NotFound.Ignore();
Sendo que .Nullable() será para aceitar valores nulos, e .NotFound.Ignore() considerará o caso de não existindo o valor seja ignorado não levantando uma exceção nesse caso.
Comentários
Postar um comentário