【问题标题】:Editing Master Detail Records using Linq-2-Sql使用 Linq-2-Sql 编辑主从记录
【发布时间】:2011-10-12 13:42:57
【问题描述】:

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

这是一个用于编辑批次信息的主从表单。 Master part(Batch 表)包括 BatchNo、SKUTitle、StageID 和 Date 字段。详细信息部分(BatchDetail)包含字段 PackingInstruction、ExpectedYield、Units 和 TargetDate。我已经设法在创建场景中将这些信息保存在单个页面上,例如

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 的 Attach 方法,但似乎无法弄清楚任何事情。

【问题讨论】:

    标签: asp.net-mvc entity-framework linq-to-sql asp.net-mvc-3 linq-to-entities


    【解决方案1】:

    在 MVC 音乐商店演示中,有一小部分介绍了通过使用 JQuery AJAX 调用删除控制器操作从购物车中删除项目。示例在part 8 of this tutorial

    实际的 AJAX 调用解释大约是页面下方的 3/4。如果您想快速搜索并找到它,该部分的标题是“使用 jQuery 进行 Ajax 更新”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多