Asp.net mvc 使用Linq-2-Sql编辑主明细记录

Asp.net mvc 使用Linq-2-Sql编辑主明细记录,asp.net-mvc,entity-framework,linq-to-sql,asp.net-mvc-3,linq-to-entities,Asp.net Mvc,Entity Framework,Linq To Sql,Asp.net Mvc 3,Linq To Entities,我正在asp.NETMVC-3应用程序中使用Linq-2-Sql作为ORM。首先看一下表格: 这是用于编辑批次信息的主明细表。主零件(批次表)包括批次号、SKUTitle、StageID和日期字段。详细信息部分(BatchDetail)包含字段PackingInstruction、ExpectedYield、Units和TargetDate。我已经在create场景中的单个页面上保存了这些信息,如 public ActionResult CreateBatch(Batch batch, Bat

我正在asp.NETMVC-3应用程序中使用Linq-2-Sql作为ORM。首先看一下表格:

这是用于编辑批次信息的主明细表。主零件(批次表)包括批次号、SKUTitle、StageID和日期字段。详细信息部分(BatchDetail)包含字段PackingInstruction、ExpectedYield、Units和TargetDate。我已经在create场景中的单个页面上保存了这些信息,如

public ActionResult CreateBatch(Batch batch, BatchDetail detail)
{
    batch.BatchDetails.AddRange(detail.ToList());
    ctx.Batches.InsertOnSubmit(batch);
    ctx.SubmitChanges();
}
但编辑场景是相当棘手的。在上图所示的表单中,用户可以在细节部分添加新记录,删除和编辑现有记录,当数据发布到控制器时,我们无法知道哪些记录是新添加的,哪些是修改的,哪些是删除的。因此,作为结果,我不得不做一些类似的事情

public ActionResult EditBatch(int id, BatchDetail detail)
{
     var batch = ctx.Batches.SingleOrDefault(x=>x.BatchID == id);
     ctx.BatchDetails.DeleteAllOnSubmit(ctx.BatchDetails.ToList());
     UpdateModel(batch);
     batch.BatchDetails.AddRange(detail);
     ctx.SubmitChanges();

}
我讨厌在这种情况下删除细节记录。在Linq-2-Sql中是否有一种方法可以避免在类似场景中删除所有记录?如果不是,我可以在EF中完成这项工作而不必进行不必要的删除吗

编辑
我一直在研究
System.Data.Linq.Table
的附加方法,但似乎什么都想不出来。

在MVC音乐商店演示中,有一个小部分涉及使用JQuery AJAX调用delete Controller操作从购物车中删除项目。这是一个例子

实际的AJAX调用解释大约占页面的3/4。如果您想快速搜索并找到它,本节的标题是“使用jQuery的Ajax更新”