Git Product home page Git Product logo

entityframeworkcore.cacheable's Introduction

EntityFrameworkCore.Cacheable

A high performance second level query cache for Entity Framework Core.



What is EF Core Cacheable?

Entity Framework (EF) Core Cacheable is an extention library for the popular Entity Framework data access technology.

It provides caching functionality for all types of query results. Based on expression tree and parameters, the context decide rather to execute query against database or returning result from memory.

How caching affects performance

This a sample result of 1,000 iterations of an uncached and cached query, called agains a really good performing MSSQL-database.

Average database query duration [+00:00:00.1698972].
Average cache query duration [+00:00:00.0000650].
Cached queries are x2,611 times faster.

Even with a InMemory test database, the results are significant faster.

Average database query duration [+00:00:00.0026076].
Average cache query duration [+00:00:00.0000411].
Cached queries are x63 times faster.

The performance gain can be even higher, depending on the database performance.

Install via NuGet

You can view the package page on NuGet.

To install EntityFrameworkCore.Cacheable, run the following command in the Package Manager Console:

PM> Install-Package EntityFrameworkCore.Cacheable

This library also uses the Data.HashFunction and aspnet.Extensions as InMemory cache.

Configuring a DbContext

There are three types of configuring the DbContext to support Cachable. Each sample use UseSqlite as option only for showing the pattern.

For more information about this, please read configuring DbContextOptions.

Constructor argument

Application code to initialize from constructor argument:

var optionsBuilder = new DbContextOptionsBuilder<CacheableBloggingContext>();
optionsBuilder
    .UseSqlite("Data Source=blog.db")
    .UseSecondLevelCache();

using (var context = new CacheableBloggingContext(optionsBuilder.Options))
{
    // do stuff
}

OnConfiguring

Context code with OnConfiguring:

public partial class CacheableBloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlite("Data Source=blog.db");
            optionsBuilder.UseSecondLevelCache();
        }
    }
}

Using DbContext with dependency injection

Adding the Dbcontext to dependency injection:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<CacheableBloggingContext>(options => options
        .UseSqlite("Data Source=blog.db"))
        .UseSecondLevelCache();
}

This requires adding a constructor argument to your DbContext type that accepts DbContextOptions.

Usage

To get in use of result caching, you simply need to add .Cacheable(... to your query and define a TTL parameter.

var cacheableQuery = cacheableContext.Books
	.Include(d => d.Pages)
	.ThenInclude(d => d.Lines)
	.Where(d => d.ID == 200)
	.Cacheable(TimeSpan.FromSeconds(60));

Custom Cache Provider

Alternatively you can provide a custom implementation of ICachingProvider (default is MemoryCacheProvider). This provides a easy option for supporting other caching systems like redis or Memcached.

optionsBuilder.UseSecondLevelCache(new MyCachingProvider());

Contributors

The following contributors have either created (thats only me ๐Ÿ˜œ) the project, have contributed code, are actively maintaining it (including documentation), or in other ways being helpfull contributors to this project.

Name GitHub
Steffen Mangold @SteffenMangold
Smit Patel @smitpatel

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.