Я использую Linq-2-Sql в качестве ORM в приложении asp.net mvc-3. Сначала взгляните на форму ...
Это основная форма для редактирования информации о партии. Основная часть (таблица партий) включает в себя поля 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 без ненужного удаления?
Редактировать: Я изучал метод Attach System.Data.Linq.Table
, но, похоже, ничего не могу понять