2012-02-06 59 views
0

目前我正在尋找一種方法來查找[context] .SubmitChanges()中實體的舊值。Linq to SQL - 審計跟蹤(在SubmitChanges中查找舊值)

據我所知只有新值出現。 我是否真的需要對數據庫執行查詢以獲取實體的舊值?

該解決方案通過GertArnold

public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) 
       { 
        // Get the changeset 
        ChangeSet changeSet = this.GetChangeSet(); 

        // Put the updated objects into a IEnumerable 
        IEnumerable<object> updatedEntities = changeSet.Updates; 

        foreach (var entity in updatedEntities.Where(entity => AuditTypes.Contains(entity.GetType()))) 
        { 
         var old = this.GetTable(entity.GetType()).GetModifiedMembers(entity); 
         // Do something with the old values 
        } 

        // Save the changes 
        base.SubmitChanges(failureMode); 
       } 
+0

[Linq to SQL:獲取已更改行的舊值]的可能重複(http://stackoverflow.com/questions/1852533/linq-to-sql-getting-old-values-of-changed-rows) – 2012-02-06 09:46:21

+0

@WouterdeKort我確實看到帖子,但沒有說明如何獲取緩存。另外,當我查看我的SubmitChanges時,即使沒有調用刷新,我也會看到新的值。 – Julian 2012-02-06 10:06:40

回答

3

看起來你正在尋找的Table.GetModifiedMembers method

正如你想要的舊值一個實體,這種方法是有用的。

+0

謝謝,那就是我一直在尋找的! – Julian 2012-02-06 13:04:46

0
+0

我已經在google上找到該鏈接,但我們不想使用第三方庫來解決問題。 – Julian 2012-02-06 11:04:15

+0

你的第二個鏈接會讓我改變所有的實體。這不是我想要做的事情。感謝您的迴應,但我真的需要一種方法來獲得舊的價值觀。如果這是不可能的,那麼我也想知道這一點。 – Julian 2012-02-06 11:53:40