.net 仅提交一个实体的更改

.net 仅提交一个实体的更改,.net,linq-to-sql,.net-3.5,.net,Linq To Sql,.net 3.5,如果我从一个具有DataContext实例的表中选择多行。 然后,如果我要对行中的属性进行一些更改,我是否可以仅将所选行之一的更改提交到数据库?是的,您可以 首先,需要隔离要撤消更改的实体。 然后,可以使用DataContext类使用数据库中的值覆盖这些实体 MyEntity e1, e2, e3 // changed entities ... // keep the changes only for e3 List<MyEntity> undoList = new List<

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

是的,您可以

首先,需要隔离要撤消更改的实体。 然后,可以使用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();
MyEntity e1、e2、e3//已更改实体
...
//保留更改仅适用于e3
List undoList=新列表();
添加(e1);
添加(e2);
刷新(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();
MyEntity changedEntityToSubmit;//首先,您需要知道需要提交的实体是什么。
List allChangedEntities=新列表(myDataContext.GetChangeSet().Updates);
所有更改身份。删除(更改身份以提交);
myDataContext.Refresh(RefreshMode.OverwriteCurrentValues,allChangedEntities);
myDataContext.SubmitChanges();

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

谢谢您的回答,这是对我问题的准确回答。但是在实践中,这种方法不是很有用,因为如果我不知道使用DataContext跟踪的所有实体,我不能保证只提交指定的对象。但你几乎得了+1分。但是如果我想保留其他实体中的更改,因为我可能需要在将来提交更改,我丢失了更改,对吗?但是我可以创建实体的克隆,将其附加到新的DataContext,设置为modified/new/deleted。然后我可以从“旧”实体的DataContext中删除更改。结果会一样安全,对吧?我明白你的意思。但是我看不到一个简单的解决方法:(没关系。我可以为这个技术做一些辅助方法。非常感谢你的帮助。