仅提交一个实体的更改

时间:2008-11-13 18:34:28

标签: .net linq-to-sql .net-3.5

如果我使用一个DataContext实例从一个表中选择多行。 然后我会对行中的属性进行一些更改,是否可以仅针对所选行之一向数据库提交更改?

1 个答案:

答案 0 :(得分:4)

是的,你可以。

首先,您需要隔离要撤消更改的实体。 然后,您可以使用DataContext类使用数据库中的值覆盖这些实体。

MyEntity e1, e2, e3 // changed entities
...
// keep the changes only for e3
List<MyEntity> undoList = new List<MyEntity>();
undoList.Add(e1);
undoList.Add(e2);
myDataContext.Refresh(RefreshMode.OverwriteCurrentValues, undoList);

myDataContext.SubmitChanges();

修改

您可以在DataContext中跟踪所有已更改的对象,如下所示:

MyEntity changedEntityToSubmit; // first you need to know what is the entity you need to submit.
List<object> allChangedEntities = new List<object>(myDataContext.GetChangeSet().Updates);
allChangedEntities.Remove(changedEntityToSubmit);

myDataContext.Refresh(RefreshMode.OverwriteCurrentValues, allChangedEntities);

myDataContext.SubmitChanges();

此代码仅考虑更新。您还可能需要考虑插入和删除中的更改。这取决于你。