SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Entity Framework 4.1 – Code First Pietro Libro, Fondatore DomusDotNet pietro.libro@domusdotnet.org Roma, 7 Ottobre 2011
Agenda Configuration & Mapping Validazione Proprietà, Persistenza e Query Concorrenza
Configuration & Mapping L’origine di tutto: la classe DbContext I passi minimi nell’approccio Code First: Costruire le classi che definiscono l’object Model asData Model (Importante: Code First NON è DDD  ) Costruire una classe derivata da DbContext(gateway per l’accesso all’entità e dati) ed esporre proprietà System.Data.Entity.DataSet<> per ognuna delle classi dell’Object Model Se ci basiamo solo sulle convezioni nient’altro.
Configuration & Mapping Quali convezioni? Nome database e stringa di connessione Di default: «LocalhostQLEXPRESS», Full QualifiedTypeName del DbContextderivato Override: aggiungere App.Config o Web.Config con una stringa di connessione Custom il cui nome è uguale al DbContext derivato
Configuration & Mapping Quali convezioni ?  Per il mapping delle colonne abbiamo convezioni per: Chiave primarie Nomi delle tabelle Nomi delle colonne Nomi delle relazioni ForeignKey Tipi Ecc… Possiamo cambiarle ? Ovviamente si: Utilizzando gli attributi del System.ComponentModel.Annotations Fluent API Elenco delle convenzioni Code First http://msdn.microsoft.com/en-us/library/hh161541%28VS.103%29.aspx
Configuration & Mapping ,[object Object],MaxLenght Key DataType … ,[object Object],[object Object]
Configuration & Mapping ,[object Object],Aggiungere nuove configurazioni a quelle già presenti Classi derivate da EntityTypeConfiguration<>  o  ComplexTypeConfiguration<>  secondo dei casi Rimuovere configurazioni esistenti ,[object Object],modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>() PluggableConventions non supportate (in questa versione)  ,[object Object],AutoDetectChangesEnabled  LazyLoadingEnabled ProxyCreationEnabled ValidateOnSaveEnabled
Configuration & Mapping Inizializzazione del database Cancella e crea in ogni caso Database.SetInitializer<Db>(new DropCreateDatabaseAlways<Db>()); Crea se non esiste Database.SetInitializer<Db>(new CreateDatabaseIfNotExists<Db>()); Cancella e crea se il modello cambia (Attenzione!) Database.SetInitializer<Db>(new DropCreateDatabaseIfModelChanges<Db>()); Strategia Custom Database.SetInitializer<Db>(new DbCustomDatabaseStrategy());  DEMO
Validazione Perché ‘Validare ?’ Dati corretti  Risparmiare round trip sul server (SQL Azure) In EF 4.1 Abilitata per default Utilizza attributi (DataAnnotations.ValidationAttribute) Validazione automatica dei ComplextType Supporta l’interfaccia IValidatableObject Attributi su NavigationProperties e Collection (validità della proprietà e non degli elementi)
Validazione Quando viene eseguita ? Prima della  persistenza dei dati On-demand per singola entità On-demand per singola proprietà Se la validazione non ha successo: DbEntityValidationException (EntityValidationErrors) DbEntityValidationResult (ValidationErrors) ValidationError ,[object Object],Non esegue la validazione automatica dei ComplexType DEMO
Proprietà Per ogni proprietà di  un’entità: Current Value (getet) Context.Entry(entity).Property(n=>n.name).CurrentValue Original Value (getet) Context.Entry(entity).Property(n=>name).OriginalValue Verificare proprietà modificate: Context.Entry(entity).Property(n=>n.name).IsModified (Getet) Forzare l’Updatedurante il SaveChanges() anche se Original Value e Current Value coincidono Current, Original e Database Values: Context.Entry(entity).CurrentValues() Context.Entry(entity).OriginalValues() Context.Entry(entity).GetDatabaseValues()
Proprietà Original e CurrentValues da un altro oggetto:  Consideriamo un DTO del tipo: new Book {Title=‘Pippo’ , ISBN=‘Franco’}; Il DTO viene utilizzato da  Services Layerper la comunicazione tra strati Valorizzare la entity da modificare Context.Entry(entity).CurrentValues.SetValues(dto) DEMO
Persistenza e Query Abbiamo visto nella sessione di Alessandro  l’utilizzo di LINQ per l’interrogazione dei dati.
Persistenza e Query Stored Procedure ,[object Object]
Possiamo utilizzare l’ObjectContext «wrappato» dal DbContext corrente
Oppure
DbContext.Books.SqlQuery(con Tracking)
DbContext.Database.SqlQuery<Book> (No Tracking)

Weitere ähnliche Inhalte

Ähnlich wie Pomeriggio Entity Framework - Code First

ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...Alessandro Alpi
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastorefirenze-gtug
 
Build a LINQ-enabled Repository
Build a LINQ-enabled RepositoryBuild a LINQ-enabled Repository
Build a LINQ-enabled RepositoryAndrea Saltarello
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateManuel Scapolan
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERDotNetCampus
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerAlessandro Alpi
 
Asp.net gestione della_memoria
Asp.net gestione della_memoriaAsp.net gestione della_memoria
Asp.net gestione della_memoriaCrismer La Pignola
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of KotlinErik Minarini
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018Marco Parenzan
 

Ähnlich wie Pomeriggio Entity Framework - Code First (20)

Vb.Net
Vb.NetVb.Net
Vb.Net
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
DevOpsHeroes 2016 - Realizzare Continouous Integration con SQL Server e Visua...
 
Introduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastoreIntroduzione a google_app_engine_datastore
Introduzione a google_app_engine_datastore
 
Build a LINQ-enabled Repository
Build a LINQ-enabled RepositoryBuild a LINQ-enabled Repository
Build a LINQ-enabled Repository
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
Entity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernateEntity Framework 4.0 vs NHibernate
Entity Framework 4.0 vs NHibernate
 
Il web 2.0
Il web 2.0Il web 2.0
Il web 2.0
 
Dojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web DominoDojo nuovo look alle vostre applicazioni web Domino
Dojo nuovo look alle vostre applicazioni web Domino
 
CONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVERCONTINUOUS INTEGRATION CON SQL SERVER
CONTINUOUS INTEGRATION CON SQL SERVER
 
DotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql ServerDotNetCampus - Continuous Integration con Sql Server
DotNetCampus - Continuous Integration con Sql Server
 
Asp.net gestione della_memoria
Asp.net gestione della_memoriaAsp.net gestione della_memoria
Asp.net gestione della_memoria
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Java lezione 10
Java lezione 10Java lezione 10
Java lezione 10
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Two months of Kotlin
Two months of KotlinTwo months of Kotlin
Two months of Kotlin
 
What is new in C# 2018
What is new in C# 2018What is new in C# 2018
What is new in C# 2018
 
#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2#dd12 grillo daniele_xpages_tips_tricks_rev2
#dd12 grillo daniele_xpages_tips_tricks_rev2
 

Mehr von DomusDotNet

Application lifecycle management ... e quindi
Application lifecycle management ... e quindiApplication lifecycle management ... e quindi
Application lifecycle management ... e quindiDomusDotNet
 
Unit testing in Visual Studio 2013
Unit testing in Visual Studio 2013Unit testing in Visual Studio 2013
Unit testing in Visual Studio 2013DomusDotNet
 
ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%DomusDotNet
 
Push Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background AgentPush Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background AgentDomusDotNet
 
Sviluppare per Intel® Ultrabook™
Sviluppare per Intel® Ultrabook™Sviluppare per Intel® Ultrabook™
Sviluppare per Intel® Ultrabook™DomusDotNet
 
ALM@Work - Team collaboration with visual studio alm 2012
ALM@Work - Team collaboration with visual studio alm 2012ALM@Work - Team collaboration with visual studio alm 2012
ALM@Work - Team collaboration with visual studio alm 2012DomusDotNet
 
ALM@Work - Lab management for everyone
ALM@Work - Lab management for everyoneALM@Work - Lab management for everyone
ALM@Work - Lab management for everyoneDomusDotNet
 
ALM@Work - Continuous delivery 101
ALM@Work - Continuous delivery 101ALM@Work - Continuous delivery 101
ALM@Work - Continuous delivery 101DomusDotNet
 
ALM@Work - Unit testing in Visual studio 2012
ALM@Work - Unit testing in Visual studio 2012ALM@Work - Unit testing in Visual studio 2012
ALM@Work - Unit testing in Visual studio 2012DomusDotNet
 
ALM@Work - Typical developer day
ALM@Work - Typical developer dayALM@Work - Typical developer day
ALM@Work - Typical developer dayDomusDotNet
 
We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3DomusDotNet
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesDomusDotNet
 
ALM Revolutions - Non si vive di solo check-out e check-in
ALM Revolutions - Non si vive di solo check-out e check-inALM Revolutions - Non si vive di solo check-out e check-in
ALM Revolutions - Non si vive di solo check-out e check-inDomusDotNet
 
ALM Revolutions - Process Template Customization
ALM Revolutions - Process Template CustomizationALM Revolutions - Process Template Customization
ALM Revolutions - Process Template CustomizationDomusDotNet
 
ALM Revolutions - What's new in visual studio ALM 11
ALM Revolutions - What's new in visual studio ALM 11ALM Revolutions - What's new in visual studio ALM 11
ALM Revolutions - What's new in visual studio ALM 11DomusDotNet
 
Pomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact EditionPomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact EditionDomusDotNet
 
Pomeriggio Entity Framework - Database First
Pomeriggio Entity Framework - Database FirstPomeriggio Entity Framework - Database First
Pomeriggio Entity Framework - Database FirstDomusDotNet
 

Mehr von DomusDotNet (17)

Application lifecycle management ... e quindi
Application lifecycle management ... e quindiApplication lifecycle management ... e quindi
Application lifecycle management ... e quindi
 
Unit testing in Visual Studio 2013
Unit testing in Visual Studio 2013Unit testing in Visual Studio 2013
Unit testing in Visual Studio 2013
 
ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%ASP.NET MVC: sfruttare la piattaforma al 100%
ASP.NET MVC: sfruttare la piattaforma al 100%
 
Push Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background AgentPush Notification, Live Tile e Background Agent
Push Notification, Live Tile e Background Agent
 
Sviluppare per Intel® Ultrabook™
Sviluppare per Intel® Ultrabook™Sviluppare per Intel® Ultrabook™
Sviluppare per Intel® Ultrabook™
 
ALM@Work - Team collaboration with visual studio alm 2012
ALM@Work - Team collaboration with visual studio alm 2012ALM@Work - Team collaboration with visual studio alm 2012
ALM@Work - Team collaboration with visual studio alm 2012
 
ALM@Work - Lab management for everyone
ALM@Work - Lab management for everyoneALM@Work - Lab management for everyone
ALM@Work - Lab management for everyone
 
ALM@Work - Continuous delivery 101
ALM@Work - Continuous delivery 101ALM@Work - Continuous delivery 101
ALM@Work - Continuous delivery 101
 
ALM@Work - Unit testing in Visual studio 2012
ALM@Work - Unit testing in Visual studio 2012ALM@Work - Unit testing in Visual studio 2012
ALM@Work - Unit testing in Visual studio 2012
 
ALM@Work - Typical developer day
ALM@Work - Typical developer dayALM@Work - Typical developer day
ALM@Work - Typical developer day
 
We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3We Want Web - Web Applications con MVC 3
We Want Web - Web Applications con MVC 3
 
WeWantWeb - WCF Data Services
WeWantWeb - WCF Data ServicesWeWantWeb - WCF Data Services
WeWantWeb - WCF Data Services
 
ALM Revolutions - Non si vive di solo check-out e check-in
ALM Revolutions - Non si vive di solo check-out e check-inALM Revolutions - Non si vive di solo check-out e check-in
ALM Revolutions - Non si vive di solo check-out e check-in
 
ALM Revolutions - Process Template Customization
ALM Revolutions - Process Template CustomizationALM Revolutions - Process Template Customization
ALM Revolutions - Process Template Customization
 
ALM Revolutions - What's new in visual studio ALM 11
ALM Revolutions - What's new in visual studio ALM 11ALM Revolutions - What's new in visual studio ALM 11
ALM Revolutions - What's new in visual studio ALM 11
 
Pomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact EditionPomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact Edition
 
Pomeriggio Entity Framework - Database First
Pomeriggio Entity Framework - Database FirstPomeriggio Entity Framework - Database First
Pomeriggio Entity Framework - Database First
 

Kürzlich hochgeladen

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 

Kürzlich hochgeladen (9)

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 

Pomeriggio Entity Framework - Code First

  • 1. Entity Framework 4.1 – Code First Pietro Libro, Fondatore DomusDotNet pietro.libro@domusdotnet.org Roma, 7 Ottobre 2011
  • 2. Agenda Configuration & Mapping Validazione Proprietà, Persistenza e Query Concorrenza
  • 3. Configuration & Mapping L’origine di tutto: la classe DbContext I passi minimi nell’approccio Code First: Costruire le classi che definiscono l’object Model asData Model (Importante: Code First NON è DDD  ) Costruire una classe derivata da DbContext(gateway per l’accesso all’entità e dati) ed esporre proprietà System.Data.Entity.DataSet<> per ognuna delle classi dell’Object Model Se ci basiamo solo sulle convezioni nient’altro.
  • 4. Configuration & Mapping Quali convezioni? Nome database e stringa di connessione Di default: «LocalhostQLEXPRESS», Full QualifiedTypeName del DbContextderivato Override: aggiungere App.Config o Web.Config con una stringa di connessione Custom il cui nome è uguale al DbContext derivato
  • 5. Configuration & Mapping Quali convezioni ? Per il mapping delle colonne abbiamo convezioni per: Chiave primarie Nomi delle tabelle Nomi delle colonne Nomi delle relazioni ForeignKey Tipi Ecc… Possiamo cambiarle ? Ovviamente si: Utilizzando gli attributi del System.ComponentModel.Annotations Fluent API Elenco delle convenzioni Code First http://msdn.microsoft.com/en-us/library/hh161541%28VS.103%29.aspx
  • 6.
  • 7.
  • 8. Configuration & Mapping Inizializzazione del database Cancella e crea in ogni caso Database.SetInitializer<Db>(new DropCreateDatabaseAlways<Db>()); Crea se non esiste Database.SetInitializer<Db>(new CreateDatabaseIfNotExists<Db>()); Cancella e crea se il modello cambia (Attenzione!) Database.SetInitializer<Db>(new DropCreateDatabaseIfModelChanges<Db>()); Strategia Custom Database.SetInitializer<Db>(new DbCustomDatabaseStrategy()); DEMO
  • 9. Validazione Perché ‘Validare ?’ Dati corretti Risparmiare round trip sul server (SQL Azure) In EF 4.1 Abilitata per default Utilizza attributi (DataAnnotations.ValidationAttribute) Validazione automatica dei ComplextType Supporta l’interfaccia IValidatableObject Attributi su NavigationProperties e Collection (validità della proprietà e non degli elementi)
  • 10.
  • 11. Proprietà Per ogni proprietà di un’entità: Current Value (getet) Context.Entry(entity).Property(n=>n.name).CurrentValue Original Value (getet) Context.Entry(entity).Property(n=>name).OriginalValue Verificare proprietà modificate: Context.Entry(entity).Property(n=>n.name).IsModified (Getet) Forzare l’Updatedurante il SaveChanges() anche se Original Value e Current Value coincidono Current, Original e Database Values: Context.Entry(entity).CurrentValues() Context.Entry(entity).OriginalValues() Context.Entry(entity).GetDatabaseValues()
  • 12. Proprietà Original e CurrentValues da un altro oggetto: Consideriamo un DTO del tipo: new Book {Title=‘Pippo’ , ISBN=‘Franco’}; Il DTO viene utilizzato da Services Layerper la comunicazione tra strati Valorizzare la entity da modificare Context.Entry(entity).CurrentValues.SetValues(dto) DEMO
  • 13. Persistenza e Query Abbiamo visto nella sessione di Alessandro l’utilizzo di LINQ per l’interrogazione dei dati.
  • 14.
  • 15. Possiamo utilizzare l’ObjectContext «wrappato» dal DbContext corrente
  • 20. Concorrenza Concorrenza (ottimistica): Specifichiamo le proprietà interessate Attributo [ConcurrencyCheck] Due possibili strategie: StoreWins Utilizziamo il metodo Reload() per sovrascrivere i dati dell’entity con quelli presenti nel database Client Wins Sostituiamo i valori originali dell’entity con quelli del database GetDatabaseValues() (eliminazione delle incogruenze) DEMO
  • 21. Futuro (Entity Framework 4.2) Rilasciata la CTP a Giugno 2011 e la Beta 1 ad Agosto 2011 Enum SpatialType Table-Valuedfunctions Stored Procedure con result sets multipli Ottimizzazione delle query nei modelli Table-per-Type (TPT) Query Linq automaticamente compilate e «cached» Entity Data Model con diagrammi multipli Stored Procedure mappate automaticamente a ComplexType Miglioramenti e aggiunge di funzionalità all’Entity Data Designer Code First Sql Migration Evoluzione del database in sincronia con l’evoluzione del modello Code First
  • 22. Link utili Entity Framework 4.1 Download: http://www.microsoft.com/download/en/details.aspx?id=8363 Blog Personale: http://blogs.ugidotnet.org/PietroLibroBlog Blog EntityFramework Design: http://blogs.msdn.com/b/efdesign Ado.NetTeam Blog: http://blogs.msdn.com/b/adonet DomusDotNet : http://www.domusdotnet.org