--- name: net-repository-pattern description: Implement repository pattern with Unit of Work for EF Core license: MIT compatibility: opencode metadata: audience: .net-developers framework: entityframeworkcore patterns: repository --- ## 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 ```csharp public interface IRepository where TEntity : Entity { Task GetByIdAsync(Guid id); Task> GetAllAsync(); Task> ListAsync( ISpecification spec); Task GetEntityWithSpec(ISpecification spec); Task CountAsync(ISpecification spec); void Add(TEntity entity); void Update(TEntity entity); void Delete(TEntity entity); } ``` ### Unit of Work ```csharp public interface IUnitOfWork : IDisposable { IProductRepository Products { get; } IOrderRepository Orders { get; } IUserRepository Users { get; } Task CompleteAsync(); Task RollbackAsync(); } ``` ### Specification Pattern ```csharp public interface ISpecification { Expression> Criteria { get; } List>> Includes { get; } string IncludeString { get; } Expression> OrderBy { get; } Expression> OrderByDescending { get; } } ``` ## Best Practices 1. Repositories are per aggregate root 2. Use specifications for complex queries 3. Unit of Work manages transactions 4. DbContext is internal to infrastructure 5. Repository interfaces in Domain layer 6. 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.