代码之家  ›  专栏  ›  技术社区  ›  Sisiutl

我可以“撤消”linq to sql更新吗?

  •  9
  • Sisiutl  · 技术社区  · 16 年前

    在Linq to SQL中,如果我在上下文中更新了一个对象,但没有调用SubmitChanges,有没有一种方法可以“撤消”或放弃该更新,以便在最终调用SubmitChanges时更改不会被提交? 例如,如果我更新了几个对象,然后决定在提交之前放弃其中一个对象的更改。

    第2部分:实体框架的相同问题,v3.5

    2 回复  |  直到 16 年前
        1
  •  3
  •   Justin Niessner    16 年前

    linq to sql和entity framework都将使用相同的调用(假设您仍然具有活动上下文):

    _dbContext.Refresh(RefreshMode.OverwriteCurrentValues, yourObj);
    

    一种更合适的方法是将上下文视为工作单元,在这种情况下,刷新对象时将不再具有活动上下文。您只需丢弃当前使用的对象,并从新上下文中获取新的副本。

        2
  •  1
  •   Tommy    16 年前

    我认为您可以使用.getOriginalEntityState(Yourity)来检索原始值。然后将更新后的实体设置回原始实体

    dim db as new yourDataContext
    //get entity
    dim e1 as yourEntity = (from x in db.table1).take(1)
    //update entity
    e1.someProperty = 'New Value'
    //get original entity
    dim originalEntity = db.table1.getOrignalEntityState(e1)
    e1 = originalEntity
    db.submitChanges()
    

    非常伪代码,但我认为它传达了正确的想法。使用此方法,您还可以在不刷新整个实体的情况下撤消一个或多个属性更改。