EF Unit Of Work
v3.0.0
| فرع | يبني | النشر |
|---|---|---|
| يتقن | ![]() | |
| يطور | ![]() | ن/أ |
مستودع ووحدة تنفيذ نمط العمل لتنفيذ إطار الكيان 3.
تثبيت حزم nuget. استخدم التجريدات لطبقات المنطق والآخر مع طبقة البنية البنية أو مشروع العصر الحجري المتجانس.
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 ;
}الأساليب قبل ذلك
GetAll ( predicate , orderBy ) . ToPagedArray ( pageSize , pageNumber ) ;
GetAll ( predicate , orderBy ) . ToPagedListAsync ( pageSize , pageNumber ) ;
GetAll ( predicate , orderBy ) . ToPagedDictionary ( keySelector , pageSize , pageNumber ) ;