EF Unit Of Work
v3.0.0
| Zweig | Bauen | Einsatz |
|---|---|---|
| Master | ![]() | |
| entwickeln | ![]() | N / A |
Repository und Einheit der Arbeitsmuster -Implementierung für Entity Framework Core 3.
Installieren Sie die Nuget -Pakete. Verwenden Sie Abstraktionen für Logikschichten und die andere mit Infrastrukturschicht oder monolithischem Projekt.
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 ;
}Die Vorhermethoden sind gleich, dass
GetAll ( predicate , orderBy ) . ToPagedArray ( pageSize , pageNumber ) ;
GetAll ( predicate , orderBy ) . ToPagedListAsync ( pageSize , pageNumber ) ;
GetAll ( predicate , orderBy ) . ToPagedDictionary ( keySelector , pageSize , pageNumber ) ;