C# Concepts 4
C# Concepts 4
Repository Pattern
C#: Repository Pattern
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString(
"DefaultConnection")));
builder.Services.AddScoped<IUserRepository, UserRepository>();
Example Step 5: Using the
Repository in a Service
public interface IUserService
{
Task<User> GetUserAsync(int id);
Task<IEnumerable<User>> GetAllUsersAsync();
Task CreateUserAsync(User user);
Task UpdateUserAsync(User user);
Task DeleteUserAsync(int id);
}
Example Step 5: Using the
Repository in a Service
public class UserService : IUserService
{
private readonly IUserRepository _userRepository;
private readonly ILogger _logger;
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
private readonly IUserService _userService;
private readonly ILogger _logger;
return Ok(user);
}
Example Step 6: Using the Service
in a Controller
[HttpGet]
public async Task<IActionResult> GetAllUsers()
{
var users = await _userService.GetAllUsersAsync();
return Ok(users);
}
Example Step 6: Using the Service
in a Controller
[HttpPost]
public async Task<IActionResult> CreateUser(User user)
{
await _userService.CreateUserAsync(user);
return CreatedAtAction(nameof(GetUser), new { id =
user.Id }, user);
}
Example Step 6: Using the Service
in a Controller
[HttpPut("{id}")]
public async Task<IActionResult> UpdateUser(int id, User user)
{
if (id != user.Id)
return BadRequest();
await _userService.UpdateUserAsync(user);
return NoContent();
}
Example Step 6: Using the Service
in a Controller
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteUser(int id)
{
await _userService.DeleteUserAsync(id);
return NoContent();
}
}
Benefits of Repository Pattern:
• Separation of Concerns: Business logic is separated from data
access logic.