Tipos de relacionamentos com fluent nhibernate
Neste post irei brincar um pouco mais com Nhibernate, tentando passar os tipos de relacionamento como ele, 1 x 1, 1 x n e n x n.
Eu irei utilizar o mesmo projeto dos posts anteriores.
Para o relacionamento 1 x 1 irei criar o domínio Armadura, onde iremos especificar que tipo de armadura do cavaleiro Ex.: Bronze, prata, papel … etc.
Nosso classe de mapeamento:
Note o .Length que adicionei depois do Map, como estamos criando as nossas tabelas, através de nossas classes de domínio e mapeamento,com fluent nhibernate também podemos , setar a o tamanho de nossas colulas se elas serão not null … etc.
No Domínio Cavaleiros adicione :
public virtual Armadura Armadura { get; set; }
Criamos uma propriedade com o valor do domínio Armadura.
Em CavaleirosMap
References(x => x.Armadura);
Com isso mapeamos a nossa pripriedade Armadura com o Domínio Armadura, assim criando o relacionamento 1 x 1, vamos rodar o script para que o fluent crie a tabela o relacionamento.
Na classe Config.cs altere os parametros do método .Create(true, true), agora na HomeController, dentro da Index action adicione o código para que ele possa gerer o script e dropar e criar as tabelas.
var drop = new Config();
Verificando no nosso banco:
Podemos ver na imagem, que ele fez tudo para agente, crio a tabela e a FK em Cavaleiros. Agora vamos ao relacionamento 1 X n.
Iremos utilizar 1 x n HasMany, quando precisarmos de uma lista Ex.: Cavaleiro,Especial, temos que criar um lista de especiais para um cavaleiro, pois um cavaleiro ira ter muitos especiais.
Para isso vamos criar o Domínio Especiais:
Mapeamento:
No Domínio Cavaleiros adicione este trecho de código:
Como cavaleiros terá uma lista de especiais, criamos uma propriedade especial com o valor da interface IList, depois criamos a propriedade Especial como Enumerable, para que possamos com a nossa lista e depois no construtor iniciamos a nossa lista, até aqui bem simples, vamos ao nosso Map:
E no nosso Map de Cavaleiros, temos também que alterar, pois como especial não e mais uma string, está com o valor de uma referência e será um lista temos que mapea-lo como tal:
HasMany(x => x.Especial)
.Access.CamelCaseField(Prefix.Underscore);
Neste trecho estamos especificando que o relacionamento é de um para muitos, que teremos uma lista do tipo Especial.
Bom vamos rodar novamente o projeto para criar a nossa tabela…
O banco tem que ficar desta forma:
Agora vamos para n x n:
Vamos criar o Domínio Batalhas, onde um cavaleiro pode ter lutado em muitas Batalhas e uma batalha pode ter participado muitos Cavaleiros.
Criando o domínio Batalhas:
O Map de Batalhas:
O domínio Cavaleiros:
Mao de Cavaleiros:
Vamos rodar Buildar para testar.
O banco tem que ficar desta forma:
Bom com isso finalizamos os tipos de relacionamento com fluent nhubernate, no próximo post irei criar os metodos para que possamos testar esses relacionamentos… até espero que sejá útil
Segue abaixo o link para Download do projeto:
http://www.4shared.com/file/LUdieTLg/MvcNhibernate_2.html











