Post on 29-Nov-2014
description
@EF@Wor
k
@EF@Work
EF 6.0 What's new
Pietro Librohttp://blogs.ugidotnet.org/PietroLibroBlog
pietro.libro@domusdotnet.org
http://www.linkedin.com/in/pietrolibro…
@EF@Wor
k
EF6 (beta 1), cosa c’è di nuovoEF6 Code First
Custom Code First ConventionsStored Procedures MappingAsync-await
EF6 MigrationsCode First Migration OperationsMulti-Tenant Migrations
Agenda
@EF@Wor
k
• 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@Wor
k
• 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@Wor
k
• Interception/SQL logging• AddRange• RemoveRange
EF6 (beta 1), cosa c’è di nuovo (3/3)
@EF@Wor
k
Code First => Convenzioni (default)Es: Definizione della chiave primariaNon sempre ideali\sufficienti per i nostri modelli
Utilizzo di Workaround o modifica del modello
Soluzione: Custom Code First Conventions
Code First Conventions
@EF@Wor
k
Lightweight ConventionsFiltriamo ”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@Wor
k
Configuration ConventionsIConfigurationConvention<T1,T2>T1 in {Type,PropertyInfo}T2:
ModelConfigurationEntityTypeConfigurationPropertyConfiguration
NavigationConfigurationPrimitivePropertyConfiguration
DateTimePropertyConfigurationDecimalPropertyConfigurationLengthPropertyConfiguration
BinaryPropertyConfigurationStringPropertyConfiguration
Code First Conventions (CC)
@EF@Wor
k
Configuration ConventionsAttributi Custom
Code First Conventions (CA)
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]public class NonUnicodeAttribute : Attribute { …}
@EF@Wor
k
Model Based ConventionsSono le piu’ potenti (Low-Level)Manipolazione metadata utilizzati da EF
IDbConventionIEdmConventionIDbMappingConvention
Code First Conventions (MBC)
@EF@Wor
k
Ordine di applicazioni
LightweightConventionsIConfigurationConvention e EdmConventionIDbConventionIDbMappingConvention
Code First Conventions
@EF@Wor
k
DEMO
Code First Conventions
@EF@Wor
kCF Configuration AddFromAssembly
Assembly configurationAssembly = Assembly.LoadFile(@"CarRental.EF6.Configuration.dll");modelBuilder.Configurations.AddFromAssembly(configurationAssembly);
@EF@Wor
k
DEMO
CF Configuration AddFromAssembly
@EF@Wor
k
In EF5:Nessuna possibilità di mapping per Insert\Delete\UpdateMapping di Entities direttamente su tabelleSqlQuery<>, ”SELECT” tramite Stored Procedures
CF Stored Procedure Mapping
@EF@Wor
k
EF6 Code First:Mapping di Stored Procedure
Solo tramite Fluent APIIn futuro (forse) attributi
Per singola EntitàI\U\D tramite Stored Procedure
oI\U\D tramite Fluent API
L’uso misto non è previsto !
CF Stored Procedure Mapping
@EF@Wor
k
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@Wor
k
DEMO
CF Stored Procedure Mapping
@EF@Wor
k
EF6 supporta il pattern async-await (.NET 4.5)Goals
Server ScalabilityClient Responseviness
Non GoalsThread SafetyAsync Lazy Loading
CF Async Query e Save
@EF@Wor
k
Versione ”async” per:Operazioni di I\O (bottleneck)
ToLists(),for each, SqlQuery ecc ...
Operazioni per l’invio di comandi al DBSaveChanges, ExecuteSqlCommand
Metodi con doppia Versione, esempio:SaveChangesSaveChangesAsync
No Async per creazione database/schema
CF Async Query e Save
@EF@Wor
k
DEMO
CF Async Query e Save
@EF@Wor
k
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@Wor
k
DEMO
EF6 Multi-Tenant Migrations
@EF@Wor
k
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:MigrationOperationDbMigrationSqlServerMigrationSqlGenerator (dip. provider)
Code First Migrations Operations
@EF@Wor
k
DEMO
Code First Migrations Operations
@EF@Wor
kDomande & (possibili) Risposte
@EF@Wor
kGrazie agli sponsor
@EF@Wor
k
http://tinyurl.com/EFatWork
Per voi sono solo 10 minuti persi, per noi è utilissimo per poter crescere e migliorare!
@EF@Wor
k
1) Ereditarietà2) Relazioni Ricorsive3) Spatial Type – DbGeography4) System.Drawing.Color5) Protected Properties6) Entità Disconnesse (N-Tier)7) Testing
EF Real Life con "casi pelosi“
@EF@Wor
kDomain Model
@EF@Wor
k
Tre tipologie:
Table Per HierachyTable Per TypeTable Per Concrete Class
1) Ereditarietà
@EF@Wor
k
TPH – Table per Hierarchy
Ereditarietà
Optional
BaseDomainObject
Abstract Class
Accessory
Optional
Class
Service
Optional
Class
@EF@Wor
k
TPT – Table per Type
Ereditarietà
Car
Vehicle
ClassVan
Vehicle
Class
Vehicle
BaseDomainObject
Abstract Class
@EF@Wor
k
TPC – Table per Concrete Class
Ereditarietà
Car
Vehicle
ClassVan
Vehicle
Class
Vehicle
BaseDomainObject
Abstract Class
@EF@Wor
k2) Relazioni Ricorsive
@EF@Wor
k3) Spatial Type - DbGeography
@EF@Wor
k
Almeno possibili soluzioni:
Complex TypeUso di proprietà
4) System.Drawing.Color
@EF@Wor
k5) Protected Properties
@EF@Wor
k6) Entità Disconnesse (N-Tier)
Internet
@EF@Wor
kRepository Pattern
@EF@Wor
k7) Testing