Entity Framework (EF) Core è la versione riprogettata e riscritta del motore di mappatura relazionale degli oggetti di Entity Framework per .NET Core applicazioni. È molto leggero, estensibile e multipiattaforma.
Tuttavia, transazione elevata .NET Core applicazioni che utilizzano Prestazioni facciali EF Core e colli di bottiglia della scalabilità nel livello di database durante i picchi di carico. Questo perché, sebbene sia possibile ridimensionare linearmente il livello dell'applicazione aggiungendo più server delle applicazioni, non è possibile aggiungere più server di database per ridimensionarlo.
Ma se usi una cache distribuita come NCache nella vostra .NET Core applicazioni, puoi rimuoverle rapidamente colli di bottiglia in termini di prestazioni e scalabilità e gestire carichi di transazione estremi.
Metodi di estensione è una funzionalità di C# che consente di estendere classi e tipi esistenti senza creare classi derivate. Un metodo di estensione è un tipo speciale di metodo statico ma viene chiamato come se fosse un metodo di istanza nella classe estesa.
NCache ha integrato le sue funzionalità di memorizzazione nella cache in EF Core tramite i metodi di estensione. Questo rende l'utilizzo NCache dall'interno di un Applicazione EF Core molto semplice e diretto. Di seguito è riportato un elenco di metodi di estensione EF Core forniti da NCache.
I dati più comuni da memorizzare nella cache in EF Core sono i dati transazionali. Questi sono i dati che cambiano di frequente che vengono creati in fase di esecuzione (ad es. cliente, account, attività, ecc.) e vengono memorizzati nella cache solo per un breve periodo durante il quale l'applicazione li legge più volte.
Il metodo di estensione FromCache() ti consente di memorizzare nella cache i dati transazionali memorizzando nella cache il set di risultati del tuo LINQ query. Vedi l'esempio qui sotto.
//Load suppliers into the cache with the expiration options
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
where supplier.SupplierId < 10
select supplier).FromCache(options);
Qui, prima di andare al database per recuperare questi dati, il metodo FromCache() controlla la cache per questi dati. Se trovato, lo restituisce dalla cache. In caso contrario, lo recupera dal database, lo memorizza prima nella cache in modo che sia lì la prossima volta, quindi restituisce i risultati al chiamante.
Hai la possibilità di memorizzare nella cache l'intera raccolta come un elemento nella cache o di suddividere tutte le sue entità e memorizzarle nella cache separatamente. Break out è utile se vuoi anche recuperare o aggiornare individualmente queste entità. Di seguito è riportata la versione Async di questo metodo.
//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
where supplier.SupplierId < 10
select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();
I dati di riferimento sono qualcosa che dovresti memorizzare nella cache completamente. Questo ti permette di correre LINQ query solo nella cache e non andare mai nel database per questo. Tieni presente che se non hai l'intero set di dati nella cache, i risultati della query LINQ non sono corretti perché controllano solo la cache e presuppongono che l'intero set di dati sia nella cache.
Con il metodo di estensione LoadIntoCache(), puoi popolare la tua cache EF Core con tutti i tuoi dati di riferimento. Vedi l'esempio seguente per popolare la tua cache.
//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
select product)
.LoadIntoCache(out string cacheKey, options);
Dopo aver caricato la cache con tutti i dati di riferimento, puoi eseguire query LINQ su di essa anziché sul database. Ciò riduce la pressione sul database e migliora le prestazioni e la scalabilità delle applicazioni. Vedi l'esempio qui sotto.
//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
where product.Discontinued == true
select product).FromCacheOnly();
Tieni presente che la cache dei dati di riferimento di EF Core deve contenere l'intero set di dati (ad es. Prodotti in questo caso). In caso contrario, il metodo di estensione FromCacheOnly() restituirà solo tutto ciò che è nella cache poiché non controlla il database. E questo potrebbe non essere corretto.
Ogni volta che apporti modifiche alle entità in EF Core, puoi aggiornare EF Core Cache con esse ottenendo l'handle "Cache" ed effettuando la chiamata al metodo di aggiornamento appropriato. Di seguito è riportato un esempio.
// Initialize the database context
NorthwindContext database = new NorthwindContext();
...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
namespace Alachisoft.NCache.EntityFrameworkCore
{
public class Cache
{
public void Insert(object entity, out string cacheKey, CachingOptions options);
public void Remove(object entity);
public void Remove(string cacheKey);
public void RemoveByQueryIdentifier(Tag tag);
}
}
Entity Framework Core non viene fornito con il suo framework di memorizzazione nella cache (come NHibernato fa). Tuttavia, NCache ha sviluppato per te un framework di memorizzazione nella cache molto flessibile, potente e tuttavia molto semplice. Dovresti usarlo per i seguenti motivi:
Si prega di vedere i dettagli di tutti NCache funzioni attive Confronto edizione pagina. Leggi di più su NCache e scarica una prova completa di 30 giorni funzionante di NCache dai link sottostanti.