Entity Framework 4 Code-First
-
Upload
comunidade-netponto -
Category
Technology
-
view
1.713 -
download
2
Transcript of Entity Framework 4 Code-First
Entity Framework 4.1 Code FirstVítor Tomaz
http://netponto.org23ª Reunião Lisboa - 24/09/2011
Patrocinadores desta reunião
Vítor TomazISEL – LEICConsultor Independente
NetPontoPortugal@ProgramarRevista ProgramarAzurePTHTML5PTGASP
Agenda
• Introdução• Convenções• Data Annotations• Fluent API• O que não suporta• Futuro?
IntroduçãoDatabase
First
Model First
Code First
Base de DadosNova
Base de DadosAntiga
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
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
Modelo e Convenções
demonstração
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
demonstração
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
demonstração
Data Annotations
Para validação• Key• Required• MaxLength• MinLength
Data Annotations
Para mapeamento• Table• Column• ConcurrencyCheck• TimeStamp• DatabaseGenerated
• NotMapped• ComplexType• ForeignKey• InverseProperty
Fluent API
demonstração
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
• 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)
DbContext a partir de base de dados existente
demonstração
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ê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
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 [email protected]://twitter.com/vitortomaz