30
Entity Framework 4.1 Code First Vítor Tomaz http://netpont o.org 23ª Reunião Lisboa - 24/09/2011

Entity Framework 4 Code-First

Embed Size (px)

Citation preview

Page 1: Entity Framework 4 Code-First

Entity Framework 4.1 Code FirstVítor Tomaz

http://netponto.org23ª Reunião Lisboa - 24/09/2011

Page 2: Entity Framework 4 Code-First

Patrocinadores desta reunião

Page 3: Entity Framework 4 Code-First

Patrocinadores desta reunião

Page 4: Entity Framework 4 Code-First

Vítor TomazISEL – LEICConsultor Independente

NetPontoPortugal@ProgramarRevista ProgramarAzurePTHTML5PTGASP

Page 5: Entity Framework 4 Code-First

Agenda

• Introdução• Convenções• Data Annotations• Fluent API• O que não suporta• Futuro?

Page 6: Entity Framework 4 Code-First

IntroduçãoDatabase

First

Model First

Code First

Base de DadosNova

Base de DadosAntiga

Page 7: Entity Framework 4 Code-First

Introdução

• EF 4.1 adiciona funcionalidades à EF 4.0

Code FirstEF 4.1

DbContextEF 4.1

Entity Framework 4.0( na .NET 4 / VisualStudio 2010 )

Code FirstEF 4.1

Page 8: Entity Framework 4 Code-First

ExecuçãoDesenho

Definição das Classes em código

Introdução

Definição de Configurações

Adicionais Metadata em memória

Objectos

Fluent API

Anotações

Page 9: Entity Framework 4 Code-First

Modelo e Convenções

demonstração

Page 10: Entity Framework 4 Code-First

Convenções– Descoberta de Tipos• Declarados no “nosso“ Context• Registados via Fluent API• Detectados por Reachability (é recursiva)

– Descoberta de Tipos Complexos• São considerados tipos complexos classes que:

– Não tenham chave primária (inferida e/ou declarada)– Não tenham propriedades a referir outros tipos– Não sejam referidos por uma collection property noutro tipo

Page 11: Entity Framework 4 Code-First

Convenções– Chave Primária• ‘Id’ ou ‘<class name>Id’• Do tipo ‘int’, ‘long’ ou ‘short’• São registados como identity columns

– Detecção de relações inversas• Serão detectadas relações inversas sempre que:

– Existir uma e apenas uma navigation property (referência ou colecção) em cada classe

– Se existirem mais do que uma não ocorre detecção e teremos que usar DataAnnotations ou Fluent API para as definir

Page 12: Entity Framework 4 Code-First

Convenções– Chave Estrangeira• Se ocorreu detecção de relação inversa• A propriedades tem o nome:

– ‘<navigation property name><primary key property name>’– ‘<principal class name><primary key property name>’ – ‘<primary key property name>’

• Com o tipo de dados igual à chave primária da outra classe• A multiplicidade vai ser:

– Opcional se a propriedade for nullable– Obrigatória se a propriedade não for nullable (activa também o

Cascade Delete)

Page 13: Entity Framework 4 Code-First

Initializers e Seed

demonstração

Page 14: Entity Framework 4 Code-First

Convenções

Database Initializers–DropCreateDatabaseAlways –DropCreateDatabaseIfModelChanges –CreateDatabaseIfNotExists

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DemoContext>());

Page 15: Entity Framework 4 Code-First

Convenções

Seed public class DemoContextInitializer

:DropCreateDatabaseIfModelChanges<DemoContext>     {         

protected override void Seed(DemoContext context)       {             context.Categorias.Add(new Categoria(){Nome="Bebidas"});base.Seed(context);         }     

}

Page 16: Entity Framework 4 Code-First

Data Annotations

demonstração

Page 17: Entity Framework 4 Code-First

Data Annotations

Para validação• Key• Required• MaxLength• MinLength

Page 18: Entity Framework 4 Code-First

Data Annotations

Para mapeamento• Table• Column• ConcurrencyCheck• TimeStamp• DatabaseGenerated

• NotMapped• ComplexType• ForeignKey• InverseProperty

Page 19: Entity Framework 4 Code-First

Fluent API

demonstração

Page 20: Entity Framework 4 Code-First

Fluent API

• A Fluent API sobrepõe-se às Data Annotation• Oferece mais possibilidades de configuração• Usada a partir de – OnModelCreating de DbContext – Classe derivada de EntityTypeConfiguration<T>

• Strongly Typed– permite o uso de Intellisense

Page 21: Entity Framework 4 Code-First

Fluent API• Propriedades

• Tipos

• Relações

modelBuilder.Entity<Departmento>().Property(t => t.Nome) .HasMaxLength(50);

modelBuilder.Entity<Departmento>().ToTable("Deps");

modelBuilder.Entity<Curso>() .HasMany(t => t.Instrutores) .WithMany(t => t.Cursos)

Page 22: Entity Framework 4 Code-First

DbContext a partir de base de dados existente

demonstração

Page 23: Entity Framework 4 Code-First

O que não suporta– Customização (adição) de convenções• Permite remoção das convenções por defeito

– Mapeamento de Procedimentos armazenados• Podem ser chamados directamente (ExecuteSqlCommand ou

SqlQuery)

– Migração de esquemas• Suporta apagar e recriar bases de dados

Page 24: Entity Framework 4 Code-First

Futuro?

• Migrações• Enum • Spatial data type• Procedimentos Armazenados• Convenções customizáveis

Page 25: Entity Framework 4 Code-First

Questões?

Page 26: Entity Framework 4 Code-First

ReferênciasADO.NET Entity Framework 4.1

– http://www.msdn.com/data/ef– NuGet – EntityFramework

ADO.NET team blog– http://blogs.msdn.com/b/adonet/

MSDN Library– .NET Development -> Entity Framework 4.1

Page 27: Entity Framework 4 Code-First

Patrocinadores desta reunião

Page 28: Entity Framework 4 Code-First

Patrocinadores desta reunião

Page 29: Entity Framework 4 Code-First

Próximas reuniões presenciais

• 24/09/2011 – Setembro (2 anos!)• 29/10/2011 – Outubro• 19/11/2011 – Outubro (Coimbra)• 26/11/2011 – Novembro

Reserva estes dias na agenda! :)

Page 30: Entity Framework 4 Code-First

Obrigado!

Vítor [email protected]://twitter.com/vitortomaz