| name | net-repository-pattern |
| description | Implement repository pattern with Unit of Work for EF Core |
| license | MIT |
| compatibility | opencode |
| metadata | [object Object] |
What I Do
I implement repository pattern with Unit of Work:
- Generic repository base
- Specific repositories
- Unit of Work pattern
- EF Core integration
- Specification pattern support
When to Use Me
Use this skill when:
- Implementing data access layer
- Adding repository abstractions
- Working with EF Core
- Need Unit of Work pattern
Repository Structure
src/{ProjectName}.Infrastructure/Data/
├── DbContext/
│ ├── AppDbContext.cs
│ └── ApplicationDbContextFactory.cs
├── Repositories/
│ ├── Base/
│ │ ├── Repository.cs
│ │ └── ReadOnlyRepository.cs
│ ├── ProductRepository.cs
│ ├── OrderRepository.cs
│ └── UserRepository.cs
├── UnitOfWork/
│ ├── IUnitOfWork.cs
│ └── UnitOfWork.cs
├── Specifications/
│ ├── ISpecification.cs
│ └── SpecificationEvaluator.cs
└── Migrations/
Repository Implementation
Generic Repository Interface
public interface IRepository<TEntity>
where TEntity : Entity
{
Task<TEntity?> GetByIdAsync(Guid id);
Task<IReadOnlyList<TEntity>> GetAllAsync();
Task<IReadOnlyList<TEntity>> ListAsync(
ISpecification<TEntity> spec);
Task<TEntity?> GetEntityWithSpec(ISpecification<TEntity> spec);
Task<int> CountAsync(ISpecification<TEntity> spec);
void Add(TEntity entity);
void Update(TEntity entity);
void Delete(TEntity entity);
}
Unit of Work
public interface IUnitOfWork : IDisposable
{
IProductRepository Products { get; }
IOrderRepository Orders { get; }
IUserRepository Users { get; }
Task<int> CompleteAsync();
Task RollbackAsync();
}
Specification Pattern
public interface ISpecification<T>
{
Expression<Func<T, bool>> Criteria { get; }
List<Expression<Func<T, object>>> Includes { get; }
string IncludeString { get; }
Expression<Func<T, object>> OrderBy { get; }
Expression<Func<T, object>> OrderByDescending { get; }
}
Best Practices
- Repositories are per aggregate root
- Use specifications for complex queries
- Unit of Work manages transactions
- DbContext is internal to infrastructure
- Repository interfaces in Domain layer
- Implementations in Infrastructure layer
Example Usage
Create repository implementation for:
- Product aggregate
- Order aggregate
- Customer aggregate
With Unit of Work pattern
I will generate complete repository implementation with EF Core.