EF@Work
EF@Work
EF 6.0 What's new
Pietro Libro
http://blogs.ugidotnet.org/PietroLibroBlog
pietro.libro@domusdotnet.org
http://www.linkedin.com/in/pietrolibro
…
EF@Work
EF6 (beta 1), cosa c’è di nuovo
EF6 Code First
Custom Code First Conventions
Stored Procedures Mapping
Async-await
EF6 Migrations
Code First Migration Operations
Multi-Tenant Migrations
Agenda
EF@Work
• Async - Await Pattern
• Custom Code Firsts Conventions
• Code First Mapping per
Insert/Update/Delete Stored Procedures
• Code-Based Configuration
• Tabella Migration History configurabile
• Utilizzo di Contexts multipli per singolo
DB
EF6 (beta 1), cosa c’è di nuovo
(1/3)
EF@Work
• Creazione DbContext su connessione
aperta
• Transazioni:
• Cambio dell’ Isolation Level di default
• Read_Committed_Snapshot
• Nuove API per la gestione personalizzata
delle transazioni
• Supporto a Enums e Spatial anche su
.NET 4.0
EF6 (beta 1), cosa c’è di nuovo
(2/3)
EF@Work
• Interception/SQL logging
• AddRange
• RemoveRange
EF6 (beta 1), cosa c’è di nuovo
(3/3)
EF@Work
Code First => Convenzioni (default)
Es: Definizione della chiave primaria
Non sempre idealisufficienti per i nostri modelli
Utilizzo di Workaround o modifica del modello
Soluzione:
Custom Code First Conventions
Code First Conventions
EF@Work
Lightweight Conventions
Filtriamo ”cosa” vogliamo configurare e lo
configuriamo
Al di sopra delle ”Configuration Conventions”
Code First Conventions (LC)
modelBuilder.Properties()
.Where(x => x.Name.Equals("KeyColumn"))
.Configure(x => x.IsKey());
EF@Work
Configuration Conventions
IConfigurationConvention<T1,T2>
T1 in {Type,PropertyInfo}
T2:
ModelConfiguration
EntityTypeConfiguration
PropertyConfiguration
NavigationConfiguration
PrimitivePropertyConfiguration
DateTimePropertyConfiguration
DecimalPropertyConfiguration
LengthPropertyConfiguration
BinaryPropertyConfiguration
StringPropertyConfiguration
Code First Conventions (CC)
EF@Work
Configuration Conventions
Attributi Custom
Code First Conventions (CA)
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class NonUnicodeAttribute : Attribute
{
…
}
EF@Work
Model Based Conventions
Sono le piu’ potenti (Low-Level)
Manipolazione metadata utilizzati da EF
IDbConvention
IEdmConvention
IDbMappingConvention
Code First Conventions (MBC)
EF@Work
Ordine di applicazioni
LightweightConventions
IConfigurationConvention e EdmConvention
IDbConvention
IDbMappingConvention
Code First Conventions
EF@Work
DEMO
Code First Conventions
EF@Work
CF Configuration
AddFromAssembly
Assembly configurationAssembly =
Assembly.LoadFile(@"CarRental.EF6.Configuration.dll");
modelBuilder.Configurations.AddFromAssembly(configurationAssembly);
EF@Work
DEMO
CF Configuration
AddFromAssembly
EF@Work
In EF5:
Nessuna possibilità di mapping per InsertDeleteUpdate
Mapping di Entities direttamente su tabelle
SqlQuery<>, ”SELECT” tramite Stored Procedures
CF Stored Procedure Mapping
EF@Work
EF6 Code First:
Mapping di Stored Procedure
Solo tramite Fluent API
In futuro (forse) attributi
Per singola Entità
IUD tramite Stored Procedure
o
IUD tramite Fluent API
L’uso misto non è previsto !
CF Stored Procedure Mapping
EF@Work
Se rispettiamo le convenzioni
Oppure
CF Stored Procedure Mapping
modelBuilder.Entity<Domain.Car>().MapToStoredProcedures();
modelBuilder.Entity<Domain.Car>().MapToStoredProcedures(
s => s.Insert(x => x.HasName("AddCar")));
modelBuilder.Entity<Domain.Car>().MapToStoredProcedures(
s => s.Insert(x=>x.Parameter(p=>p.HP , "parHP")));
EF@Work
DEMO
CF Stored Procedure Mapping
EF@Work
EF6 supporta il pattern async-await (.NET
4.5)
Goals
Server Scalability
Client Responseviness
Non Goals
Thread Safety
Async Lazy Loading
CF Async Query e Save
EF@Work
Versione ”async” per:
Operazioni di IO (bottleneck)
ToLists(),for each, SqlQuery ecc ...
Operazioni per l’invio di comandi al DB
SaveChanges, ExecuteSqlCommand
Metodi con doppia Versione, esempio:
SaveChanges
SaveChangesAsync
No Async per creazione database/schema
CF Async Query e Save
EF@Work
DEMO
CF Async Query e Save
EF@Work
Multi-Tenant Database
• Abilità di separare tdifferenti gruppi di tabelle
utilizzate per scopi diversi
Migrations di DbContext multipli, possibili grazie a:
• Modelbuilder.HasDefaultSchema(”...”);
• Custom Migration History Table
• -MigrationDirectory
EF6 Multi-Tenant Migrations
EF@Work
DEMO
EF6 Multi-Tenant Migrations
EF@Work
Con EF5 abbiamo a disposizione:
API per le operazioni più comuni (Create Index)
Esecuzione di SQL arbitrario, Sql (”CREATE....”)
Dipendenza dal database
Con EF6 in più abbiamo:
MigrationOperation
DbMigration
SqlServerMigrationSqlGenerator (dip. provider)
Code First Migrations Operations
EF@Work
DEMO
Code First Migrations Operations
EF@Work
Domande & (possibili) Risposte
EF@Work
Grazie agli sponsor
EF@Work
Per voi sono solo 10 minuti persi,
per noi è utilissimo per poter
crescere e migliorare!
EF@Work
1) Ereditarietà
2) Relazioni Ricorsive
3) Spatial Type – DbGeography
4) System.Drawing.Color
5) Protected Properties
6) Entità Disconnesse (N-Tier)
7) Testing
EF Real Life con "casi pelosi“
EF@Work
Domain Model
EF@Work
Tre tipologie:
Table Per Hierachy
Table Per Type
Table Per Concrete Class
1) Ereditarietà
EF@Work
TPH – Table per Hierarchy
Ereditarietà
EF@Work
TPT – Table per Type
Ereditarietà
EF@Work
TPC – Table per Concrete Class
Ereditarietà
EF@Work
2) Relazioni Ricorsive
EF@Work
3) Spatial Type - DbGeography
EF@Work
Almeno possibili soluzioni:
Complex Type
Uso di proprietà
4) System.Drawing.Color
EF@Work
5) Protected Properties
EF@Work
6) Entità Disconnesse (N-Tier)
Internet
EF@Work
Repository Pattern
EF@Work
7) Testing

EF 6.0 What's New - EF@Work