【问题标题】:Delete Rows from multiple tables using Linq web Api asp.net使用 Linq web Api asp.net 从多个表中删除行
【发布时间】:2022-01-03 07:40:34
【问题描述】:
public async Task<IHttpActionResult> DeleteUser(string id)
        {
            try {
                using (hospiceEntities db = new hospiceEntities())
                {
                    Guid guid_id = Guid.Parse(id);
                    var q =
                    (from user in db.Users
                     join resource in db.Resources
                     on user.Id equals resource.UserId
                     where user.Id == guid_id
                     select user).Single<User>();

                    foreach (Resource res in q.Resources)
                    {
                        db.Resources.Remove(res);

                    }
                    db.Users.Remove(q);
                    await db.SaveChangesAsync();
                    return Ok(Helper.SuccessResponse("User Deleted"));
                }
            }
            catch (Exception ex)
            {
                return BadRequest(ex.Message);
            }
        }

我有两个表 UsersResource 通过外键约束连接。我已经编写了上面的 LINQ 查询来删除记录,但它没有删除它。请告诉我我做错了什么。谢谢

【问题讨论】:

  • 你有什么异常吗?
  • 你调试过你的代码吗?您是否检查过qq.Resources 中是否有任何价值?
  • 我得到的异常是" "Message": "Collection was modified;枚举操作可能无法执行。” status 400 badrequest
  • 在 q.Resources 中,我正在获取两个表的所有数据。它在 foreach 循环之前工作正常,但在移出循环后它不会执行下一条语句而是跳转到 catch 块。
  • 如果您尝试使用ToList,例如foreach (Resource res in q.Resources.ToList()),怎么样?

标签: c# linq asp.net-web-api cascade http-delete


【解决方案1】:

尝试使用此语法包含资源

    var user = await
    db.Users
   .Include(u=>u.Resources)
   .Where(u=> u.Id == guid_id)
   .FirstOrDefaltAsync();

   var res=user.Resources.ToList();
     db.Resources.RemoveRange(res);

    // or try directly
   db.Resources.RemoveRange(user.Resourses);

  //or maybe this is better
     user.Resources==null;
     
     db.Users.Remove(user);
     await db.SaveChangesAsync();
  

【讨论】:

    【解决方案2】:

    在 foreach 循环中使用它

    (db.GetTable<Resource>().DeleteOnSubmit(res));
    

    并使用此代码

    db.GetTable<Users>().DeleteOnSubmit(q);  
                        db.SubmitChanges();  
    

    而不是(db.Users.Remove(q));

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    这样解决了:

     public async Task<IHttpActionResult> DeleteUser(string id)
            {
                try {
                    using (hospiceEntities db = new hospiceEntities())
                    {
                        Guid guid_id = Guid.Parse(id);
                        var deleteuser = db.Users.FirstOrDefault(e => e.Id == guid_id);
                        if (deleteuser == null)
                        {
                            return Content(HttpStatusCode.NotFound, "User Not Found");
                        }
                        else
                        {
                            var q =
                        from user in db.Users
                        join resource in db.Resources
                        on user.Id equals resource.UserId
                        where user.Id == guid_id
                        select new
                        {
                            Users = user,
                            Resources = resource
                        };
                            foreach (var item in q)
                            {
                                db.Resources.Remove(item.Resources);
                                db.Users.Remove(item.Users);
                            }
                            await db.SaveChangesAsync();
                        }
                    }
                    return Ok(Helper.SuccessResponse("User Deleted"));
                }
                catch (Exception ex)
                {
                    return BadRequest(ex.Message);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 2013-07-09
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多