Buscar

Aula_19 12 18 (1)

Prévia do material em texto

Treinamento em C# WebDeveloper
	
Aula
21
	
	Quarta-feira, 19 de Dezembro de 2018
	
	
	
Acesso a banco de dados com EntityFramework.
Desenvolvimento com Asp.Net WebApi
	
Modelagem de entidades:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Projeto.Entities
{
 public class Usuario
 {
 public int IdUsuario { get; set; }
 public string Nome { get; set; }
 public string Email { get; set; }
 public string Senha { get; set; }
 //Relacionamento de Associação (TER-MUITOS)
 public List<Perfil> Perfis { get; set; }
 }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Projeto.Entities
{
 public class Perfil
 {
 public int IdPerfil { get; set; }
 public string Nome { get; set; }
 //Relacionamento (TER-MUITOS)
 public List<Usuario> Usuarios { get; set; }
 }
}
Instalando o EntityFramework
Gerenciador de pacotes do NuGet
ORM - Mapeamento Objeto / Relacional
Mapeando as classes de entidade
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity.ModelConfiguration; //entityframework (ORM)
using Projeto.Entities; //entidades
namespace Projeto.Repositories.Mappings
{
 //classe de mapeamento para a entidade Perfil
 public class PerfilMap : EntityTypeConfiguration<Perfil>
 {
 //construtor
 public PerfilMap()
 {
 //nome da tabela
 ToTable("Perfil");
 //chave primária
 HasKey(p => p.IdPerfil);
 //demais campos da tabela
 Property(p => p.IdPerfil)
 .HasColumnName("IdPerfil");
 Property(p => p.Nome)
 .HasColumnName("Nome")
 .HasMaxLength(50)
 .IsRequired();
 }
 }
}
-----------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity.ModelConfiguration;
using System.Data.Entity.Infrastructure.Annotations;
using System.ComponentModel.DataAnnotations.Schema;
using Projeto.Entities;
namespace Projeto.Repositories.Mappings
{
 public class UsuarioMap : EntityTypeConfiguration<Usuario>
 {
 public UsuarioMap()
 {
 ToTable("Usuario");
 HasKey(u => u.IdUsuario);
 Property(u => u.IdUsuario)
 .HasColumnName("IdUsuario");
 Property(u => u.Nome)
 .HasColumnName("Nome")
 .HasMaxLength(150)
 .IsRequired();
 Property(u => u.Email)
 .HasColumnName("Email")
 .HasMaxLength(100)
 .IsRequired()
 .HasColumnAnnotation(IndexAnnotation.AnnotationName,
 new IndexAnnotation(new IndexAttribute("ix_email")
 { IsUnique = true }));
 Property(u => u.Senha)
 .HasColumnName("Senha")
 .HasMaxLength(50)
 .IsRequired();
 }
 }
}
Mapeando o relacionamento 
de muitos para muitos:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity.ModelConfiguration;
using System.Data.Entity.Infrastructure.Annotations;
using System.ComponentModel.DataAnnotations.Schema;
using Projeto.Entities;
namespace Projeto.Repositories.Mappings
{
 public class UsuarioMap : EntityTypeConfiguration<Usuario>
 {
 public UsuarioMap()
 {
 ToTable("Usuario");
 HasKey(u => u.IdUsuario);
 Property(u => u.IdUsuario)
 .HasColumnName("IdUsuario");
 Property(u => u.Nome)
 .HasColumnName("Nome")
 .HasMaxLength(150)
 .IsRequired();
 Property(u => u.Email)
 .HasColumnName("Email")
 .HasMaxLength(100)
 .IsRequired()
 .HasColumnAnnotation(IndexAnnotation.AnnotationName,
 new IndexAnnotation(new IndexAttribute("ix_email")
 { IsUnique = true }));
 Property(u => u.Senha)
 .HasColumnName("Senha")
 .HasMaxLength(50)
 .IsRequired();
 //Mapeamento muitos para muitos
 HasMany(u => u.Perfis)
 .WithMany(p => p.Usuarios)
 .Map(
 m =>
 {
 //nome da tabela associativa
 m.ToTable("UsuarioPerfil");
 //chave estrangeira para a tabela de Usuario
 m.MapLeftKey("IdUsuario");
 //chave estrangeira para a tabela de Perfil
 m.MapRightKey("IdPerfil");
 }
 ); 
 }
 }
}
----------------------------
Classe para acesso ao banco de dados 
através do EntityFramework:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Configuration;
using Projeto.Repositories.Mappings;
using Projeto.Entities;
namespace Projeto.Repositories.Context
{
 //Regra 1) Herdar DbContext
 public class DataContext : DbContext
 {
 //Regra 2) Criar um construtor que envie
 //para DbContext a connectionstring
 public DataContext()
 : base(ConfigurationManager.ConnectionStrings
				["aula20"].ConnectionString)
 {
 }
 //Regra 3) Sobrescrever o método OnModelCreating..
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
 //adicionar cada classe mapeada..
 modelBuilder.Configurations.Add(new PerfilMap());
 modelBuilder.Configurations.Add(new UsuarioMap());
 //definindo configurações globais de mapeamento
 //que irão valer para todas as classes Map
 modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
 modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
 //desativar a definição de pluralizar nomes de tabelas
 modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
 }
 //Regra 4) Declarar uma propriedade DbSet para cada entidade
 public DbSet<Perfil> Perfil { get; set; }
 public DbSet<Usuario> Usuario { get; set; }
 }
}
\Web.config.xml
 <connectionStrings>
 <add
 name="aula20"
 connectionString="Data Source=(LocalDB)\MSSQLLocalDB;
	AttachDbFilename=C:\Users\COTI\Desktop\Aula_19.12.18\
	Aula20\Projeto.Services\App_Data\Banco.mdf;Integrated Security=True"
 />
 </connectionStrings>
Fazendo o Migrations
PM> enable-migrations -force
Checking if the context targets an existing database...
Code First Migrations enabled for project Projeto.Repositories.
PM>
namespace Projeto.Repositories.Migrations
{
 using System;
 using System.Data.Entity;
 using System.Data.Entity.Migrations;
 using System.Linq;
 internal sealed class Configuration : DbMigrationsConfiguration
			<Projeto.Repositories.Context.DataContext>
 {
 public Configuration()
 {
 AutomaticMigrationsEnabled = true;
 }
 protected override void Seed
		(Projeto.Repositories.Context.DataContext context)
 {
 // This method will be called after migrating to the latest version.
 // You can use the DbSet<T>.AddOrUpdate() helper extension method 
 // to avoid creating duplicate seed data.
 }
 }
}
Criando as tabelas:
PM> update-database -verbose
8

Continue navegando