Fala Pessoal, tudo bom? O Herocast dessa semana aborda um tema muito bacana: A tradução de um modelo uml em código e seu respectivo mapeamento utilizando o Fluent NHibernate. O Objetivo é apresentar uma visão geral sobre os dois temas, dar algumas dicas e simplificar conceitos que parecem complicados de início. Espero que gostem!
VIDEO
Diagrama de classes pelo mestre Macoratti
FluentNHibernate.org
Diagrama utilizado
Classe Comentário
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Comentario
{
public int Id { get; set; }
public string Nome { get; set; }
public string Email { get; set; }
public string Mensagem { get; set; }
public Conteudo Conteudo { get; set; }
}
public class ComentarioMap : ClassMap< Comentario>
{
public ComentarioMap( )
{
// Chave primária.
Id( m => m. Id ) ;
Map( m => m. Nome )
// Campo obrigatório.
. Not . Nullable ( ) ;
Map( m => m. Email )
. Not . Nullable ( ) ;
Map( m => m. Mensagem )
. Not . Nullable ( )
// Comprimento do campo.
. Length ( 2000 ) ;
// Lado 1 do mapeamento 1xN.
References( m => m. Conteudo ) ;
}
}
Classe Autor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Autor
{
public int Id { get; set; }
public string Nome { get; set; }
public IList< Conteudo> Conteudos { get; set; }
public Autor( )
{
this . Conteudos = new List< Conteudo> ( ) ;
}
}
public class AutorMap : ClassMap< Autor>
{
public AutorMap( )
{
Id( m => m. Id ) ;
Map( m => m. Nome )
. Not . Nullable ( ) ;
// Lado N do mapeamento 1xN.
HasMany( m => m. Conteudos ) ;
}
}
Classe Categoria
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Categoria
{
public string Id { get; set; }
public string Nome { get; set; }
public string Descricao { get; set; }
public IList< Conteudo> Conteudos { get; set; }
public Categoria( )
{
this . Conteudos = new List< Conteudo> ( ) ;
}
}
public class CategoriaMap : ClassMap< Categoria>
{
public CategoriaMap( )
{
Id( m => m. Id ) ;
Map( m => m. Nome )
. Not . Nullable ( ) ;
Map( m => m. Descricao ) ;
// Mapeamento NxN.
HasManyToMany( m => m. Conteudos ) ;
}
}
Classe Conteúdo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Conteudo
{
public int Id { get; set; }
public string Titulo { get; set; }
public string Corpo { get; set; }
public Status Status { get; set; }
public IList< Categoria> Categorias { get; set; }
public Autor Autor { get; set; }
public IList< Comentario> Comentarios { get; set; }
public Conteudo( )
{
this . Categorias = new List< Categoria> ( ) ;
this . Comentarios = new List< Comentario> ( ) ;
}
}
public class ConteudoMap : ClassMap< Conteudo>
{
public ConteudoMap( )
{
Id( m => m. Id ) ;
Map( m => m. Titulo )
. Not . Nullable ( ) ;
Map( m => m. Corpo ) ;
Map( m => m. Status ) ;
References( m => m. Autor )
// Não realiza alterações na referência.
. Cascade . None ( ) ;
HasManyToMany( m => m. Categorias )
// Pode criar e atualizar as referências.
. Cascade . SaveUpdate ( ) ;
HasMany( m => m. Comentarios )
// Controle total sobre as referências, inclusive exclusões.
. Cascade . All ( ) ;
}
}
Classe Notícia
1
2
3
4
5
6
7
8
9
10
public class Noticia : Conteudo
{
}
// SubclassMap representa a herança.
public class NoticiaMap : SubclassMap< Noticia>
{
}
Se gostou do vídeo, ajude a divulgar!
Abraços!
Comentários:
3 Comentários postados em "HeroCast 08 – Uml e Fluent NHibernate"
Victor on dezembro 15th, 2011 at 11:05 #
Muito Bom mano.
Show de bola.
Roberto Cesar Rodrigues on dezembro 18th, 2011 at 21:42 #
Cara esse seu post (assim como os outros) foram de extrema utilidade, mas esse Você acertou em cheio. Parabéns e muito obridado!
Parabens, ficou claro e objetivo.. Excelente conteudo ! Continue assim !