【问题标题】:Submit changes of only one entity仅提交一个实体的更改
【发布时间】:2010-09-22 05:09:48
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    是的,你可以。

    首先,您需要隔离要撤消更改的实体。 然后,您可以使用 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();
    

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

    【讨论】:

    • 感谢您的回答,它对我的​​问题的确切回答。但在实践中这种方法不是很有用,因为如果我不知道所有使用 DataContext 跟踪的实体,我不能保证只会提交唯一指定的对象。但是你得到了 +1 分。
    • 差不多。但是如果我想保留其他实体中的更改,因为将来可能需要提交更改,我丢失了更改,对吧?
    • 但我可以创建实体的克隆,将其附加到新的 DataContext,设置为已修改/新建/已删除。然后我可以从“旧”实体的 DataContext 中删除更改。结果会一样而且更安全,对吧?
    • 我明白你的意思。但我没有看到一个简单的解决方案:(
    • 没关系。我可以为这种技术做一些辅助方法。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多