【问题标题】:Updating multiple rows with different data with a specific id using Entity Framework Core使用 Entity Framework Core 更新具有特定 id 的不同数据的多行
【发布时间】:2020-04-25 11:41:28
【问题描述】:

我有下表:

我想用RequestId=2 更新行的ApproveStatus,其中goodsId = 4 被拒绝而goodsId=1 被批准。

我的问题是如何在 ASP.NET Core 2.2 中使用 Entity Framework Core。

这是我到目前为止所做的:

// model contain "approve" and "reject" strings and requestId which came from view
public IActionResult ApproveList(List<ApprovedGoodsByAdminAssistVM> model)  
{
    // I got the requestId from model
    var id = model.Select(s => s.RequestId).FirstOrDefault(); 

    // Filtered the two record with RequestId=2 from the table 
    var goodsList = context.RequestGoodsBrand
                           .Where(x => x.RequestId == id).ToList(); 
}

接下来要做什么?

提前致谢

【问题讨论】:

  • “其中货物Id=4 被拒绝而货物Id=1 被批准”是什么意思?对于同一属性/列,单行不能有两个不同的值。在您的表中,有两行单独的行,一行 GoodsID=4,一行 GoodsID=1。你想对每个人做什么?另外,你的ApprovedGoodsByAdminAssistVM是什么?

标签: c# asp.net-core entity-framework-core


【解决方案1】:

如果我没记错的话,这些更改可以解决您的问题。

public IActionResult ApproveList(List<ApprovedGoodsByAdminAssistVM> model)   
{
   var id = model.Select(s => s.RequestId).FirstOrDefault();  
   var goodsList = context.RequestGoodsBrand
      .Where(x => x.RequestId == id).ToList();  

   var rejectedItems = goodsList.Where(x => x.GoodsId == 4).ToList();
   var approvedItems = goodsList.Where(x => x.GoodsId == 1).ToList();

   foreach (var item in rejectedItems)
       item.ApproveStatus = "rejected";

   foreach (var item in approvedItems)
       item.ApproveStatus = "approved"

   context.SaveChanges();
}

你最好使用枚举来代替这些神奇的词('Rejected' ,'Approved')

【讨论】:

  • 但是在这段代码中没有任何东西会被提交到数据库
【解决方案2】:
public IActionResult ApproveList(List<ApprovedGoodsByAdminAssistVM> model)
    {
        var requestId = model.Select(x => x.RequestId).FirstOrDefault();
        var approvedItems = model
            .Where(x => x.RequestId == requestId && x.ApproveStatus == 1)
            .Select(x => x.GoodsId).ToList();

        var rejectedItems = model
            .Where(x => x.RequestId == requestId && x.ApproveStatus == 0)
            .Select(x => x.GoodsId).ToList();

        var goodsToBeApproved = context.RequestGoodsBrand
            .Where(x => x.RequestId == requestId && approvedItems.Contains(x.GoodsId)).ToList();
        goodsToBeApproved.ForEach(x => x.IsApproved = 1);
        context.SaveChanges();
        var goodsToBeRejected = context.RequestGoodsBrand
                .Where(x => x.RequestId == requestId && rejectedItems.Contains(x.GoodsId)).ToList();
        goodsToBeRejected.ForEach(x => x.IsApproved = 0);
        context.SaveChanges();
        return Json("Done!");
    }

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 1970-01-01
    • 2021-04-21
    • 2021-10-11
    • 2020-02-13
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多