解决在一对多的情况下,如何删除主键数据的同时也删除多个外键数据的问题

1在一对多的时候,比如我现在需要做一个进货订单表,进货订单就是主键ID,还有一个进货定单详情表和商品表,一个进货订单ID对应有多个进货订单详情ID,但是一个订单详情ID对应有1个商品ID,那样就会在数据库中存在,如果你想删除这条进货订单的时候你就需要删除多条订单详情表里面的数据,因为每张进货订单都可能对应有多个商品,所有也就有多条订单详情数据了;
2.因为主键ID是唯一的所有我们可以获取到进货订单主键ID去筛选出这条进货订单里面所包含的多条订单详情数据,
3.首先我们需要获取到主键ID,如下图,第二条数据就是拥有多个商品,所有也就对应有多条订单详情数据,x形状的就是删除按钮,因为这个按钮是在渲染表格的时候自定义的,而且还带有所对应的数据的主键ID,
在这里插入图片描述

4.这是按钮的代码
function setOperate(data) {
var StockIndentID = data.StockIndentID;
var btns = “”;

        btns += '  <a id="operate3" class="operate del" title="删除" onclick="deleteRecord(' + StockIndentID + ');"></a>';
        return btns;
    }

5.这里是通过post提交把数据传递到控制器
function deleteRecord(StockIndentID) {
$.post(“DeleteData”, { StockIndentID: StockIndentID }, function (date) {
if (date == “ture”) {
alert(“删除成功!”);
window.location.replace("/Stock/StockIndent/StockIndent");
} else {
alert(“删除失败”);
}

        })
    }

6.在控制器中通过进货订单ID作为条件去订单详情表里面查询筛选出所有符合条件的数据,然后通过for循环去一

条条地删除数据,然后再去进货订单表里面通过进货订单ID作为条件去进货订单表里面查询筛选出这条数据然后删除

public ActionResult DeleteData(int StockIndentID)
{
var stJson = “”;
List< PW_StockIndentDetail> Date = (from tbStockIndent in myModel.PW_StockIndent
join tbStockIndentDetail in myModel.PW_StockIndentDetail on tbStockIndent.StockIndentID equals tbStockIndentDetail.StockIndentID
where tbStockIndent.StockIndentID == StockIndentID
select tbStockIndentDetail).ToList();
//循环遍历删除订单详情数据
for (var i = 0 ; i < Date.Count; i++)
{
PW_StockIndentDetail stDate = Date[i];
myModel.PW_StockIndentDetail.Remove(stDate);//移除

        }

        PW_StockIndent Date1 = (from tbStockIndent in myModel.PW_StockIndent
                    where tbStockIndent.StockIndentID == StockIndentID
                    select tbStockIndent).Single();

        myModel.PW_StockIndent.Remove(Date1);//移除

      if (myModel.SaveChanges() > 0)
        {
            stJson = "ture";
        }
        return Json(stJson, JsonRequestBehavior.AllowGet);
    }

猜你喜欢

转载自blog.csdn.net/qq_44489422/article/details/90636337