【发布时间】:2020-02-10 10:20:12
【问题描述】:
我有带有 React 客户端的 asp.net core web api。我正在通过在 React 中创建的用户界面添加数据。在我的 api 中,Db 上下文作为范围服务添加,每次我的请求完成并启动新的请求时,我之前请求的所有数据都会丢失。 这就是我的配置服务的样子:
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);
}
和存储库中的方法如下: 添加新票:
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);
}
我希望能够存储通过多个请求获得的数据。 有谁知道如何做到这一点?
【问题讨论】:
-
我们需要从你的控制器中查看代码
-
您始终可以选择使用会话,但一般来说,在这种情况下使用服务器资源来跟踪更改并不是一个好主意。在简单的购物篮、列表编辑/批量编辑、完成向导等场景中,您可以在客户端跟踪更改。
-
我编辑了帖子并添加了负责将数据添加到数据库的控制器和存储库的一部分。
-
@kika123 在 all 服务中,数据存储在数据库中,在调用之间不保留在 RAM 中。这就是允许将服务部署在多个服务器上并进行负载平衡、打包在 Docker 容器等中的原因。这适用于 Nodejs 和 ASP.NET。
DbContext用于在请求期间保存数据,然后将其全部存储在数据库中。 一些需要重用的数据可以被缓存 - 同样所有堆栈都提供了一种缓存数据的方法。
标签: c# asp.net-core dbcontext ef-core-2.1