EF Unit Of Work
v3.0.0
| Bifurquer | Construire | Déploiement |
|---|---|---|
| maître | ![]() | |
| développer | ![]() | N / A |
Référentiel et unité de mise en œuvre du modèle de travail pour l'entité Framework Core 3.
Installez les packages NuGet. Utilisez des abstractions pour les couches logiques et l'autre avec une couche insfrastructure ou un projet monolithique.
dotnet add package QD.EntityFrameworkCore.UnitOfWork
dotnet add package QD.EntityFrameworkCore.UnitOfWork.Abstractions public class AppDbContext : DbContext , IDbContext
{
public DbSet < Product > Products { get ; set ; }
public AppDbContext ( DbContextOptions < AppDbContext > options ) : base ( options )
{
}
.. .
.. .
} public void ConfigureServices ( IServiceCollection services )
{
services . AddDbContext < AppDbContext > ( builder =>
{
.. .
} ) ;
#region Register UnitOfWorks
// Register a IUnitOfWork<AppDbContext>
_services . AddUnitOfWork < AppDbContext > ( ) ;
// Register a IUnitOfWork<AppDbContext> and IUnitOfWork
_services . AddUnitOfWork < AppDbContext > ( onlyGeneric : false ) ;
#endregion
// Optional, register custom repositories
_services . AddRepository < Product , ProductRepository > ( ) ;
_services . AddReadOnlyRepository < Product , ProductReadOnlyRepository > ( ) ;
} public class FancyService : IFancyService
{
private readonly IUnitOfWork < AppDbContext > _unitOfWork ;
public FancyService ( IUnitOfWork < AppDbContext > unitOfWork )
{
_unitOfWork = unitOfWork ;
}
public void DoFancyThing ( )
{
var productsRepository = _unitOfWork . GetRepository < Product > ( ) ;
var products = productsRepository . GetAll ( ) ;
.. .
// Use inserts, updates, deletes.
.. .
_unitOfWork . SaveChanges ( ) ;
}
} public void FancyFunction ( )
{
// These are some examples
// Array
IPagedCollection < Product > page1 = _productsRepository . GetPagedArray ( 20 , 0 , product => product . Price > 500 ) ;
IPagedCollection < Product > page2 = await _productsRepository . GetPagedArrayAsync (
pageSize : 10 ,
orderBy : query => query . OrderBy ( product => product . Price ) . ThenBy ( product => product . Name )
) ;
// Indexers
var a = page1 [ 1 ] . Price ;
var b = ( ( PagedArray < Product > ) page1 ) [ 2 ] . Price ;
.. .
// List
IPagedCollection < Product > page1 = _productsRepository . GetPagedList ( 20 , 0 , product => product . Price > 500 ) ;
IPagedCollection < Product > page2 = await _productsRepository . GetPagedListAsync (
pageSize : 10 ,
orderBy : query => query . OrderBy ( product => product . Price ) . ThenBy ( product => product . Name )
) ;
// Indexers
var a = page1 [ 1 ] . Price ;
var b = ( ( PagedList < Product > ) page1 ) [ 2 ] . Price ;
.. .
// Dictionary
IPagedCollection < KeyValuePair < Guid , Product > > page1 = _productsRepository . GetPagedDictionary ( product => product . Id , 20 , 0 , product => product . Price > 500 ) ;
IPagedCollection < KeyValuePair < Guid , Product > > page2 = await _productsRepository . GetPagedDictionaryAsync (
keySelector : product => product . Id ,
pageSize : 10 ,
orderBy : query => query . OrderBy ( product => product . Price ) . ThenBy ( product => product . Name )
) ;
// Indexers
var a = page1 [ 1 ] . Value . Price ;
var b = ( ( PagedDictionary < Guid , Product > ) page1 ) [ Guid . Parse ( "5926d548-c0b3-4c40-b37f-e89be7741024" ) ] . Price ;
}Les méthodes avant sont les mêmes que
GetAll ( predicate , orderBy ) . ToPagedArray ( pageSize , pageNumber ) ;
GetAll ( predicate , orderBy ) . ToPagedListAsync ( pageSize , pageNumber ) ;
GetAll ( predicate , orderBy ) . ToPagedDictionary ( keySelector , pageSize , pageNumber ) ;