Wiki
Clone wikiDataAccess.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