2014-05-20 54 views
0

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

IT能够在Linq To Sql中实现吗?

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

我已检查与相同的其他问题从here但我did'nt得到他们使用我也尝试过的方式,但它给我的错误“序列不包含任何元素”

我这样尝试: : 其中函数参数中的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); 

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