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




         Entity Framework 4.1 Code First
                                        Vítor Tomaz
Patrocinadores desta reunião
Patrocinadores desta reunião
Vítor Tomaz
ISEL – LEIC
Consultor Independente

NetPonto
Portugal@Programar
Revista Programar
AzurePT
HTML5PT
GASP
Agenda
•   Introdução
•   Convenções
•   Data Annotations
•   Fluent API
•   O que não suporta
•   Futuro?
Introdução
             Model First
 Database
   First




                 Code First
Introdução
• EF 4.1 adiciona funcionalidades à EF 4.0
          DbContext                          Code First
            EF 4.1                             EF 4.1



              Entity Framework 4.0
                ( na .NET 4 / VisualStudio 2010 )
Introdução
        Desenho          Execução

      Definição das
                         Objectos
    Classes em código


      Definição de
     Configurações
       Adicionais       Metadata em
                         memória
       Anotações
       Fluent API
Modelo e Convenções
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
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
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)
Initializers e Seed
Convenções
Database Initializers
   – DropCreateDatabaseAlways
   – DropCreateDatabaseIfModelChanges
   – CreateDatabaseIfNotExists
Database.SetInitializer(
new DropCreateDatabaseIfModelChanges<DemoContext>()
);
Convenções
Seed
public class DemoContextInitializer
:DropCreateDatabaseIfModelChanges<DemoContext>
{
   protected override void Seed(DemoContext context)
   {
   context.Categorias.Add(new Categoria(){Nome="Bebidas"});
   base.Seed(context);
   }
}
Data Annotations
Data Annotations
Para validação
• Key
• Required
• MaxLength
• MinLength
Data Annotations
Para mapeamento
• Table               •   NotMapped
• Column              •   ComplexType
• ConcurrencyCheck    •   ForeignKey
• TimeStamp           •   InverseProperty
• DatabaseGenerated
Fluent API
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
Fluent API
• Propriedades
modelBuilder.Entity<Departmento>().Property(t => t.Nome)
    .HasMaxLength(50);

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


• Relações
modelBuilder.Entity<Curso>()
    .HasMany(t => t.Instrutores)
    .WithMany(t => t.Cursos)
DbContext a partir de base de
     dados existente
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
Futuro?
•   Migrações
•   Enum
•   Spatial data type
•   Procedimentos Armazenados
•   Convenções customizáveis
Questões?
Referências
ADO.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
Patrocinadores desta reunião
Patrocinadores desta reunião
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! :)
Obrigado!
Vítor Tomaz
vitorbstomaz@gmail.com
http://twitter.com/vitortomaz

[NetPonto] Entity Framework 4 Code-First

  • 1.
    23ª Reunião Lisboa- 24/09/2011 http://netponto.org Entity Framework 4.1 Code First Vítor Tomaz
  • 2.
  • 3.
  • 4.
    Vítor Tomaz ISEL –LEIC Consultor Independente NetPonto Portugal@Programar Revista Programar AzurePT HTML5PT GASP
  • 5.
    Agenda • Introdução • Convenções • Data Annotations • Fluent API • O que não suporta • Futuro?
  • 6.
    Introdução Model First Database First Code First
  • 7.
    Introdução • EF 4.1adiciona funcionalidades à EF 4.0 DbContext Code First EF 4.1 EF 4.1 Entity Framework 4.0 ( na .NET 4 / VisualStudio 2010 )
  • 8.
    Introdução Desenho Execução Definição das Objectos Classes em código Definição de Configurações Adicionais Metadata em memória Anotações Fluent API
  • 9.
  • 10.
    Convenções – Descobertade 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
  • 11.
    Convenções – ChavePrimá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
  • 12.
    Convenções – ChaveEstrangeira • 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)
  • 13.
  • 14.
    Convenções Database Initializers – DropCreateDatabaseAlways – DropCreateDatabaseIfModelChanges – CreateDatabaseIfNotExists Database.SetInitializer( new DropCreateDatabaseIfModelChanges<DemoContext>() );
  • 15.
    Convenções Seed public class DemoContextInitializer :DropCreateDatabaseIfModelChanges<DemoContext> { protected override void Seed(DemoContext context) { context.Categorias.Add(new Categoria(){Nome="Bebidas"}); base.Seed(context); } }
  • 16.
  • 17.
    Data Annotations Para validação •Key • Required • MaxLength • MinLength
  • 18.
    Data Annotations Para mapeamento •Table • NotMapped • Column • ComplexType • ConcurrencyCheck • ForeignKey • TimeStamp • InverseProperty • DatabaseGenerated
  • 19.
  • 20.
    Fluent API • AFluent 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
  • 21.
    Fluent API • Propriedades modelBuilder.Entity<Departmento>().Property(t=> t.Nome) .HasMaxLength(50); • Tipos modelBuilder.Entity<Departmento>().ToTable("Deps"); • Relações modelBuilder.Entity<Curso>() .HasMany(t => t.Instrutores) .WithMany(t => t.Cursos)
  • 22.
    DbContext a partirde base de dados existente
  • 23.
    O que nãosuporta – 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
  • 24.
    Futuro? • Migrações • Enum • Spatial data type • Procedimentos Armazenados • Convenções customizáveis
  • 25.
  • 26.
    Referências ADO.NET Entity Framework4.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
  • 27.
  • 28.
  • 29.
    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! :)
  • 30.