Wiki

Clone wiki

DataAccess.Core / EntityFramework

Quick Start

Overview

DataAccess.Core.EF is the implementation of DataAccess.Core for EntityFramework and EntityFrameworkCore.

Features

This implementation is compatible with all frameworks available for DataAccess.Core

Principal implementations

  • DbContextProvider implements IContextProvider<DbContext>
  • EfTransactionProvider implements ITransactionProvider<DbContext>
  • EfQueryableDataFacadeService implements IQueryableDataFacadeService
  • EfQueryDataFacade implements IQueryDataFacade

Transaction and context providers depends of DbContext delegate.

Getting Started

The easiest way to get started is by installing the available NuGet packages.

Quick examples

Let's see how can be used the principals implementation.

At the first place, you need to build your DbContext.

#!c#
// creating a custom DbContext
var dbContext = new MyDbContext(connectionString);

Once you create your DbContext, you can follow the next steps:

create a IContextProvider<DbContext> instance, using the DbContext resolved previously as dependency.

#!c#
IContextProvider<DbContext> sessionProvider = new DbContextProvider(() => MyDbContextFactory());

create a ITransactionProvider<DbContext> instance, injecting IContextProvider<DbContext> instance as dependency.

#!c#
ITransactionProvider<DbContext> transactionProvider = new EfTransactionProvider(sessionProvider);

create your IQueryableDataFacadeService instance, injecting ITransactionProvider<DbContext> as dependencies

#!c#
IQueryableDataFacadeService facade = new EfQueryableDataFacadeService(transactionProvider);

Use cases - using Dependency Injection

In the real world, all the above initialization of providers and facades must be delegated to a Dependency Injection engine.. It's trivial the choice.

SimpleInjector

see (doc) for details.

#!c#
var container = new Container();
container.Register<IQueryableDataFacadeService, EfQueryableDataFacadeService>();
container.Register<ITransactionProvider<ISession>, EfTransactionProvider>();
container.Register<IContextProvider<ISession>, DbContextProvider>(() => MyDbContextFactory());

DryIoc

see (doc) for details.

#!c#
var container = new Container();
container.Register<IQueryableDataFacadeService, EfQueryableDataFacadeService>();
container.Register<ITransactionProvider<ISession>, EfTransactionProvider>();
container.Register<IContextProvider<ISession>, DbContextProvider>(() => MyDbContextFactory());

LightInject

see (doc) for details.

#!c#
var container = new Container();
container.Register<IQueryableDataFacadeService, EfQueryableDataFacadeService>();
container.Register<ITransactionProvider<ISession>, EfTransactionProvider>();
container.Register<IContextProvider<ISession>, DbContextProvider>(() => MyDbContextFactory());

Updated