【问题标题】:Getting modified values dynamically动态获取修改后的值
【发布时间】:2014-05-20 05:48:27
【问题描述】:

我有一个问题。通过 Linq To Sql 更新表中的一行时, 我想知道唯一更改的字段。 假设我在一个页面中有 25 个字段,但我只更新了 3 个字段,并且在更新时,我只需要获取这 3 个字段,它是旧值 + 已修改或新值。

可以在 Linq To Sql 中实现吗?

我在互联网上搜索东西并开始了解 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);
  }
}

【问题讨论】:

  • 使用具有明确定义目的的视图模型。

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


【解决方案1】:

您需要在调用 SubmitChanges 之前检查您的更改。

另外,在你的例子中

TableClass instance = DB.GetChangeSet().Updates.OfType<TableClass>().Where(m => m.PkId == Id).First();

如果没有任何更改,将抛出异常,否则它将返回您正在修改的记录,即数据,因此您不妨执行类似的操作

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多