动态获取修改后的值

时间:2014-05-20 05:48:27

标签: c# asp.net-mvc-4 linq-to-sql linq-to-entities

我遇到了问题。在Linq To Sql中更新表中的行时,  我想知道唯一改变的领域。 假设我在一个页面中有25个字段,但我只更新了3个字段,在更新时,我只需要获得这3个字段,它的旧值+它的修改或新值。

可以在Linq To Sql中实现IT。

我在互联网上搜索的东西已经了解了DB.GetChangeSet(),但它只是给了我修改过的行。

我已经检查了here中与其相关的其他问题,但我确实得到了他们使用的方式我也尝试了但是它给了我错误"序列不包含任何元素"

我试过这种方式::  其中函数参数中的TableClass ObjTbl是包含模型中新值的Object。

public int UpdateDetails(int Id, TableClass ObjTbl)
{               
  using (DataContext DB = new DataContext())
  {
    var Data = DB.TableClass.Where(m => m.PkId ==   Id).FirstOrDefault();
    Data .FirstName = ObjTbl.FirstName;
    Data .MiddleInitials = ObjTbl.MiddleInitials;
    Data .FkClientID = ObjTbl.FkClientID;
    Data .LastName = ObjTbl.LastName;
    DB.SubmitChanges();
    TableClass instance = DB.GetChangeSet().Updates.OfType<TableClass>().Where(m => m.PkId == Id).First();
    DB.TableClass.GetModifiedMembers(instance);
  }
}

1 个答案:

答案 0 :(得分:1)

您需要先检查之前的更改,然后再调用SubmitChanges。

此外,在您的示例中还有

TableClass instance = DB.GetChangeSet().Updates.OfType<TableClass>().Where(m => m.PkId == Id).First();
如果没有任何改变,

将抛出异常,否则它将返回你正在修改的记录,即数据,所以你也可以做类似的事情

 ModifiedMemberInfo[] changes = DB.TableClass.GetModifiedMembers(Data); 

如果没有更改,那么这将返回一个空数组,而不是抛出异常。