2014-05-20 56 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); 

如果什麼都沒有改變,那麼這將返回一個空數組,而不是拋出異常。