这是我的代码,我想从给定用户ID的购物车表中删除一个完整的数据。这是我的购物车桌
[HttpDelete]
public HttpResponseMessage DeleteCart(int id)
{
if (IsNetworkAvailable(0))
{
var del = db.Carts.Where(e => e.UID == id);
var userid = db.Users.All(e => e.ID ==del);
db.Foods.Remove(del);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, "Delete Successfully");
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "No Network");
}
问题在Linq语句中。
我想在我提供用户ID时实现这一目标,它将删除完整的购物车
假设您的模型是,购物车实例对许多食物实例包含零,您将进行以下操作:
var foodsToDelete = db.Foods.Where(_ => _.Cart.UID == id).ToList();
db.Foods.RemoveRange(foodsToDelete);
db.SaveChanges();
将"清除购物车数据",但不能删除购物车本身。
我认为这是您应该做的
[HttpDelete]
public HttpResponseMessage DeleteCart(int id)
{
//not sure what it does?
if (IsNetworkAvailable(0))
{
var del = db.Carts.First(e => e.Id == id);
db.Carts.Remove(del);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, "Delete Successfully");
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "No Network");
}
}
您还可以考虑在保存删除后保存更改以处理意外例外并将适当的消息返回客户端时使用尝试/捕获块。
您应该避免在后端中对数据库进行多余的呼叫。我相信,如果您只想从给定的表中删除项目,则应仅发送此项目的ID。如果您有问题交付项目ID的问题,那么客户端的实现可能会有问题。
编辑
我想在我提供用户ID时实现这一目标,它将删除 该用户的完成购物车数据
[HttpDelete]
public HttpResponseMessage DeleteUserCarts(int userId)
{
//not sure what it does?
if (IsNetworkAvailable(0))
{
var carts = db.Carts.Where(e => e.UID == userId);
db.Carts.RemoveRange(carts);
db.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK, "Delete Successfully");
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "No Network");
}
}