我遇到了问题。在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);
}
}
答案 0 :(得分:1)
您需要先检查之前的更改,然后再调用SubmitChanges。
此外,在您的示例中还有
行TableClass instance = DB.GetChangeSet().Updates.OfType<TableClass>().Where(m => m.PkId == Id).First();
如果没有任何改变,将抛出异常,否则它将返回你正在修改的记录,即数据,所以你也可以做类似的事情
ModifiedMemberInfo[] changes = DB.TableClass.GetModifiedMembers(Data);
如果没有更改,那么这将返回一个空数组,而不是抛出异常。