Rembrandt. Licht und Schatten: Eine Biographie

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