Как сохранить данные, полученные от нескольких запросов в EF Core? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть asp. net core web api с клиентом React. Я добавляю данные через мой пользовательский интерфейс, созданный в React. В моем API контекст Db добавлен как сервис с областью действия, и каждый раз, когда мой запрос завершается и запускается новый, все мои данные из предыдущего запроса теряются. Вот как мои службы Configure выглядят так:

 services.AddDbContext<TicketingContext>(o=>o.UseLazyLoadingProxies().UseSqlServer(connectionString));

Метод контроллера для публикации данных выглядит следующим образом:

 [HttpPost("{id}/tickets")]
    public IActionResult CreateNewTicket(string id,
        [FromBody] TicketForCreationDto ticketForCreation)
    {
        if (ticketForCreation == null)
        {
            return BadRequest();
        }

        var ticketEntity = _mapper.Map<Ticket>(ticketForCreation);
        _ticketRepository.AddNewTicket(ticketEntity);
        _ticketRepository.AddTicketToClient(id, ticketEntity);
        if (!_ticketRepository.Save())
        {
            throw new Exception("Creating ticket failed on save");
        }

        var ticketToReturn = _mapper.Map<TicketDto>(ticketEntity);



        return CreatedAtRoute("GetTicket", new {id=id, ticketId = ticketToReturn.Id }, ticketToReturn);
    }

и методы в хранилище выглядят так: AddNewTicket:

  public void AddNewTicket(Ticket ticket)
    {
        if (ticket.Id == Guid.Empty)
        {
            ticket.Id = Guid.NewGuid();
        }

        var dispatcher = AssignTicketToDispatcher(ticket);
        if (dispatcher == null)
        {
            throw new Exception("There are no dispatchers matching this ticket");
        }

        dispatcher.UserTickets.Add(new UserTicket()
        {
            IdentityUser = dispatcher,
            Ticket = ticket,
            UserId = dispatcher.Id,
            TicketId = ticket.Id
        });


        _context.Tickets.Add(ticket);
    }

AddTicketToClient:

  public void AddTicketToClient(string id, Ticket ticket)
    {
        var client = _identityUserRepository.GetClient(id);
        if (client == null)
        {
            client = _context.Users.Where(u => u.UserName == "username").FirstOrDefault();
        }
        client.UserTickets.Add(new UserTicket()
        {
            IdentityUser = client,
            Ticket = ticket,
            UserId = client.Id,
            TicketId = ticket.Id
        });
    }

Сохранить:

 public bool Save()
    {
        return (_context.SaveChanges() >= 0);
    }

Я хочу иметь возможность хранить данные, полученные в результате нескольких запросов. У кого-нибудь есть идеи, как это сделать?

1 Ответ

1 голос
/ 10 февраля 2020

Используйте базу данных, так как это лучший метод для сохранения ваших данных.

Итак, когда вы делаете запрос - в конце запроса, после сохранения ваших последних данных - запрашиваете данные из предыдущие запросы, которые вам нужны, и верните их.

например, извлеките последние 5 сохраненных запросов, самые новые сначала (где id - пример для вашего поля первичного ключа):

var latestSaved = _context.UserTickets.OrderByDescending(x => x.id).Take(5);

Или измените, чтобы вернуть все релевантные данные, например, для активного пользователя, передавая идентификатор пользователя, сохраненный на стороне клиента.

Передавайте любые параметры, необходимые для запроса соответствующих данных. Используйте соединения / включает настройки в ваших сущностях. Все, что вам нужно сделать - использовать ваши отношения сущностей, чтобы получить то, что вам нужно из вашей базы данных. Зачем пытаться повторить то, что он уже делает? :)

...