EF Core Query

Query (None Transaction)

모든 데이터 로드

using (var context = new BloggingContext()) { var blogs = context.Blogs.ToList(); }

단일 엔터티 로드

using (var context = new BloggingContext()) { var blog = context.Blogs .Single(b => b.BlogId == 1); }

필터링

using (var context = new BloggingContext()) { var blogs = context.Blogs .Where(b => b.Url.Contains("dotnet")) .ToList(); }

예제)

Select all user (모든데이터)


Controller 에 다음을 추가

[ProducesResponseType(typeof(List<User>), StatusCodes.Status200OK)]
[HttpGet("")]
public async Task<IActionResult> GetUsers()
{
    return Ok(await _mediator.Send(new GetUsers()));
}

Command folder 에 GetUsers.cs 파일 추가

public class GetUsers : IRequest<List<User>>
{
}

Command folder 에 GetUsersHandler.cs 파일 추가

public class GetUsersHandler : IRequestHandler<GetUsers, List<User>>
{
    private readonly MyDbContext _dbContext;

    public GetUsersHandler(MyDbContext dbContext)
    {
        _dbContext = dbContext;
    }
    public async Task<List<User>> Handle(GetUsers request, CancellationToken cancellationToken)
    {
        var users = await _dbContext.Users.Select(u => new User
        {
            Id = u.Id,
            Name = u.Name,
            Email = u.Email,
        }).ToListAsync();

        return users;
    }
}

실행 및 Test




Select user (필터링된 단일 유저)


Controller 에 다음을 추가

[ProducesResponseType(typeof(User), StatusCodes.Status200OK)]
[HttpGet("{id}")]
public async Task<IActionResult> GetUser(string id)
{
    if (!ModelState.IsValid)
        return BadRequest(ModelState);
 
    return Ok(await _mediator.Send(new GetUser { Id=id}));
}

Command folder 에 GetUser.cs 파일 추가

public class GetUser : IRequest<User>
{
    public string Id { get; set; }=string.Empty;
}

Command folder 에 GetUserHandler.cs 파일 추가

public class GetUserHandler : IRequestHandler<GetUser, User>
{
    private readonly MyDbContext _dbContext;

    public GetUserHandler(MyDbContext dbContext)
    {
        _dbContext = dbContext;
    }
    public async Task<User> Handle(GetUser request, CancellationToken cancellationToken)
    {
        var users = await _dbContext.Users.Where(u=>u.Id == request.Id).Select(u => new User
        {
            Id = u.Id,
            Name = u.Name,
            Email = u.Email,
        }).ToListAsync();

        var findUser = users.FirstOrDefault();
        if(findUser == null) throw new Exception($"Can not found user, id = {request.Id}");

        return findUser;
    }
}


실행 및 Test



관련영상

댓글

이 블로그의 인기 게시물

Mediator

ASPNET 6 Web Api Basic Tutorial 1 / 2 (Swagger, SeriLog, MediatR, EntityFrameworkCore, Scrutor)

Dependency Injection Customization