Entity Framework 6.1 e l’accesso ai dati Riferimenti Sergio Galati [email protected] @gfsergio blogs.orangedotnet.org/sergio/ Grazie Agenda Versioni Entity Framework 6.1 What’s new Entity Framework 6.1 inside EF 7.0 Accenni ORM Object Relational Mapping OO Oggetti DBMS Relazioni Permette di mantenere il design del Database separato dal design delle classi. Rende l’applicazione più manutenibile e scalabile. Automatizza le operazioni CRUD operation. Versioni Core in .NET Framework Distribuito in Visual Studio e NuGet Runtime in .NET Framework Distribuito in Visual Studio Versioni Abilità nuovi scenari su nuove Piattaforme Windows store, Windows form e database non relazionali Core fuori dal .NET Framework distribuzione da NuGet. EF 6.1 What’s new Contributi dal Team di EF EF 6.1 What’s new Contributi dagli sviluppatori EF 6.1 Inside (Tool Consolidation) Possibilità di fare Reverse Engineering di un DB esistente con l’approccio Code First. EF 6.1 Inside (Tool Consolidation) DEMO Codice generato EF 6.1 Inside (Handling Transaction.Commit failures) Capacità di individuare e recuperare automaticamente errori di connessione transitori. Il meccanismo si basa sul riconoscimento del tipo di errore lato client e sul presupposto che, quando si scatena l’eccezione, l’operazione può essere ripetuta. EF 6.1 Inside (Handling Transaction.Commit failures) Scenari possibili: 1. Il Commit della transazione fallisce sul server 2. Il Commit della transazione ha esito positive sul client ma per instabilità della connessione non viene notificato al client. Caso 1: non c’è nessun problema di corruzione dei dati e l’utente può ripetere la transazione senza problemi. Caso 2: il retry dell’operazione deve essere evitato e si deve cercare di recuperare il problema. EF 6.1 Inside (Handling Transaction.Commit failures) Uso: public class MyConfiguration : DbConfiguration { public MyConfiguration() { SetTransactionHandler(SqlProviderServices.ProviderInvariantName, () => new CommitFailureHandler()); SetExecutionStrategy(SqlProviderServices.ProviderInvariantName, () => new SqlAzureExecutionStrategy()); } } Cosa succede? Viene create una tabella __TransactionHistory consultata al momento effettuare l’insert per verificare transazioni pendent. EF 6.1 Inside (Handling Transaction.Commit failures) DEMO TransactionCommit EF 6.1 Inside ([Index] Attribute) public class Post { public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } [Index] public int Rating { get; set; } public int BlogId { get; set; } } EF 6.1 Inside ([Index] Attribute) IsUnique = true) EF 6.1 Inside (Public Mapping API) Le Public Mapping API sono classi che definiscono e gestiscono tutte le informazioni (metadati) di mapping. Nelle versioni precedenti le API di Mapping non erano pubblici. Permettono di gestire e modificare come il modello effettua il mapping tra DB e Codice. EF 6.1 Inside (Public Mapping API) Il Namespace di riferimento è System.Data.Entity.Core.Mapping proprietà DbModel.ConceptualToStoreMapping Un’istanza di DBModel da modelBuilder.Build Nelle classi che implementano IConceptualModelConvention e IStoreModelConvention DbModel arriva come parametro e le Mapping APIs possono essere usate per recuperare e/o modificare le mapping information (CodeFirst). Una volta che il modello viene creato le classi diventano in sola lettura e non è possibiliìe più effettuare modifiche La documentazione è disponibile sul sito di MSDN. EF 6.1 Inside (Configuring interceptors) Un operazione introdotta con la versione 6.0 e ottimizzata nella 6.1 DatabaseLogger <interceptors> <interceptor type="System.Data.Entity.Infrastructure .Interception.DatabaseLogger, EntityFramework"> <parameters> <parameter value="C:\Temp\LogOutput.txt"/> <parameter value="true" type="System.Boolean"/> </parameters> </interceptor> </interceptors> EF 6.1 Inside (Public Mapping API) System.Data.Entity.Core.Mapping DbModel.ConcettualToStoreMapping EF 6.1 Inside (Configuring interceptors) Custom DatabaseLogger public class ExampleDatabaseLogger : IDbConfigurationInterceptor { public void Loaded( DbConfigurationLoadedEventArgs loadedEventArgs, DbConfigurationInterceptionContext interceptionContext) { var formatterFactory = loadedEventArgs .DependencyResolver .GetService<Func<DbContext, Action<string>, DatabaseLogFormatter>>(); var formatter = formatterFactory(null, Console.Write); DbInterception.Add(formatter); } } EF 6.1 Inside (Configuring interceptors) Logging-Configuration Interceptors DEMO EF 6.1 Inside (Configuring interceptors) https://entityframework.codeplex.com/SourceControl/l atest#src/EntityFramework/Infrastructure/Interception/ DatabaseLogger.cs EF 7 Cosa cambia Le API ad alto livello rimarranno uguali o molto simili. Nuove caratteristiche Batch query Comportamentali Pensionamenti EDMX ObjectContext Fine… Grazie dell’attenzione
© Copyright 2025 ExpyDoc