A maior rede de estudos do Brasil

Grátis
244 pág.
Desenvolvimento Web - MVC

Pré-visualização | Página 9 de 41

int LivroID { get; set; }
4 }
Código C# 3.19: Livro.cs
1 public class Editora
2 {
3 public int EditoraID { get; set; }
4
5 public ICollection <Livro > Livros { get; set; }
6 }
Código C# 3.20: Editora.cs
No DbContext da aplicação, podemos registrar ambas ou apenas a entidade Editora.
1 public class K19Context : DbContext
2 {
3 public DbSet <Editora > Editoras { get; set; }
4 public DbSet <Livro > Livros { get; set; }
5 }
Código C# 3.21: K19Context.cs
1 public class K19Context : DbContext
2 {
3 public DbSet <Editora > Editoras { get; set; }
46 www.k19.com.br
47 ENTITY FRAMEWORK
4 }
Código C# 3.22: K19Context.cs
Se as duas entidades forem registradas, tanto os livros quanto as editoras podem ser obtidos di-
retamente pelo DbContext. Agora, se apenas a entidade Editora for registrada, somente as editoras
podem ser obtidas diretamente pelo DbContext e os livros seriam obtidos somente através das edi-
toras.
Exercícios de Fixação
1 Abra o Visual Studio Express 2012 for Desktop; Crie um projeto do tipo Console Application em
C# chamado K19EntityFramework.
2 Instale o Entity Framework no projeto K19EntityFramework utilizando o Manage Nuget Packages.
Siga o exemplo das imagens abaixo.
Figura 3.10: Manage NuGet Package
www.facebook.com/k19treinamentos 47
ENTITY FRAMEWORK 48
Figura 3.11: Manage NuGet Package
3 Adicione uma classe chamada Endereco no projeto K19EntityFramework.
1 namespace K19EntityFramework
2 {
3 // complex type
4 public class Endereco
5 {
6 public string Logradouro { get; set; }
7
8 public int Numero { get; set; }
9
10 public string CEP { get; set; }
11 }
12 }
Código C# 3.23: Endereco.cs
4 Adicione uma classe chamada Aluno no projeto K19EntityFramework.
1 namespace K19EntityFramework
2 {
3 public class Aluno
4 {
5 public int AlunoID { get; set; }
6
7 public string Nome { get; set; }
8
9 public Endereco Endereco { get; set; }
10 }
11 }
Código C# 3.24: Aluno.cs
48 www.k19.com.br
49 ENTITY FRAMEWORK
5 Adicione uma classe chamada Professor no projeto K19EntityFramework.
1 namespace K19EntityFramework
2 {
3 public class Professor
4 {
5 public int ProfessorID { get; set; }
6
7 public string Nome { get; set; }
8
9 public Endereco Endereco { get; set; }
10 }
11 }
Código C# 3.25: Professor.cs
6 Adicione uma classe chamada Turma no projeto K19EntityFramework.
1 namespace K19EntityFramework
2 {
3 public class Turma
4 {
5 public int TurmaId { get; set; }
6
7 public int Vagas { get; set; }
8
9 public Professor Professor { get; set; }
10
11 public ICollection <Aluno > Alunos { get; set; }
12 }
13 }
Código C# 3.26: Turma.cs
7 Adicione uma classe chamada K19Context no projeto K19EntityFramework.
1 namespace K19EntityFramework
2 {
3 public class K19Context : DbContext
4 {
5 public DbSet <Turma > Turmas { get; set; }
6
7 public DbSet <Aluno > Alunos { get; set; }
8
9 public DbSet <Professor > Professores { get; set; }
10 }
11 }
Código C# 3.27: Turma.cs
8 Adicione uma classe chamada Teste no projeto K19EntityFramework.
1 namespace K19EntityFramework
2 {
3 public class Teste
4 {
5 static void Main(string [] args)
6 {
7 using (var ctx = new K19Context ())
8 {
9 Aluno a1 = new Aluno
www.facebook.com/k19treinamentos 49
ENTITY FRAMEWORK 50
10 {
11 Nome = "Amanda Guerra",
12 Endereco = new Endereco
13 {
14 Logradouro = "Rua Amalera",
15 Numero = 1789,
16 CEP = "00157 -001"
17 }
18 };
19
20 Aluno a2 = new Aluno
21 {
22 Nome = "Marcelo Martins",
23 Endereco = new Endereco
24 {
25 Logradouro = "Rua Zaul",
26 Numero = 2907,
27 CEP = "09147 -001"
28 }
29 };
30
31 Professor p = new Professor
32 {
33 Nome = "Jonas Hirata",
34 Endereco = new Endereco
35 {
36 Logradouro = "Rua Mervelha",
37 Numero = 8367,
38 CEP = "00876 -100"
39 }
40 };
41
42 Turma t = new Turma
43 {
44 Vagas = 10,
45 Alunos = new List <Aluno >()
46 };
47
48 t.Professor = p;
49 t.Alunos.Add(a1);
50 t.Alunos.Add(a2);
51
52 ctx.Turmas.Add(t);
53 ctx.SaveChanges ();
54 }
55 }
56 }
57 }
Código C# 3.28: Teste.cs
9 Execute o projeto K19EntityFramework e consulte o banco de dados para verificar se os dados
foram armazenados corretamente. Observe a estrutura das tabelas.
Data Annotations
Podemos utilizar anotações para sobrescrever as convenções de mapeamento. A seguir apresen-
taremos as principais anotações.
50 www.k19.com.br
51 ENTITY FRAMEWORK
Table e Column
No Entity Framework, os nomes das tabelas e das colunas são definidos por convenção. Contudo,
podemos personalizá-los de acordo com a necessidade através das anotações Table e Column.
1 [Table("tbl_alunos")]
2 public class Aluno
3 {
4 public int AlunoID { get; set; }
5
6 [Column("nome_do_aluno")]
7 public string Nome { get; set; }
8 }
Código C# 3.29: Aluno.cs
Figura 3.12: Personalizando os nomes das tabelas e das colunas
A anotação Column também permite a escolha do tipo da coluna correspondente à propriedade
anotada.
1 public class Produto
2 {
3 public int ProdutoID { get; set; }
4
5 [Column("descricao_do_produto", TypeName="text")]
6 public string Descricao { get; set; }
7 }
Código C# 3.30: Produto.cs
Figura 3.13: Personalizando o tipo de uma coluna
DatabaseGenerated
Por padrão, quando a propriedade correspondente à chave primária de uma tabela é numérica,
os valores dessa chave serão gerados pelo banco de dados. Podemos alterar esse comportamento
através da anotação DatabaseGenerated.
1 public class Aluno
2 {
3 [DatabaseGenerated(DatabaseGeneratedOption.None)]
4 public int AlunoID { get; set; }
5
6 public string Nome { get; set; }
7 }
Código C# 3.31: Aluno.cs
www.facebook.com/k19treinamentos 51
ENTITY FRAMEWORK 52
Key
Considere a seguinte classe.
1 public class Aluno
2 {
3 public int Codigo { get; set; }
4
5 public string Nome { get; set; }
6 }
Código C# 3.32: Aluno.cs
Nenhuma propriedade se enquadra nas convenções de nomenclatura de chave primária. Con-
tudo, é possível definir explicitamente, qual propriedade será mapeada como chave primária através
da anotação Key. No exemplo abaixo, a propriedade Codigo foi definida como chave da entidade.
1 public class Aluno
2 {
3 [Key]
4 public int Codigo { get; set; }
5
6 public string Nome { get; set; }
7 }
Código C# 3.33: Aluno.cs
Figura 3.14: Escolhendo a chave primária explicitamente
Required
Uma propriedade pode ser definida explicitamente como obrigatória através da anotação Requi-
red. No banco de dados, as colunas correspondentes às propriedades obrigatórias serão definidas
com a opção not null.
1 public class Aluno
2 {
3 public int AlunoID { get; set; }
4
5 [Required]
6 public string Nome { get; set; }
7 }
Código C# 3.34: Aluno.cs
Figura 3.15: Definindo propriedades obrigatórias
MaxLength e MinLength
52 www.k19.com.br
53 ENTITY FRAMEWORK
1 public class Aluno
2 {
3 public int AlunoID { get; set; }
4
5 [MaxLength (30), MinLength (3)]
6 public string Nome { get; set; }
7 }
Código C# 3.35: Aluno.cs
Figura 3.16: Definindo a quantidade mínima e máxima de caracteres de uma propriedade
NotMapped
Considere a seguinte classe.
1 public class Aluno
2 {
3 public int AlunoID { get; set; }
4
5 public DateTime DataDeNascimento { get; set; }
6
7 public int Idade { get; set; }
8
9 }
Código C# 3.36: Aluno.cs
Observe que a propriedade Idade pode ser calculada a partir da propriedade DataDeNascimento.
Portanto, não é necessário armazenar o valor da idade no banco de dados. Nesses casos, podemos
utilizar a anotação NotMapped e indicar quais propriedades não devem ser mapeadas nas tabelas.
1 public class Aluno
2 {
3 public int AlunoID { get; set; }
4
5 public DateTime DataDeNascimento { get; set; }
6
7 [NotMapped]
8 public int Idade { get; set; }
9
10 }
Código C# 3.37: Aluno.cs
Figura 3.17: