2012-07-11 99 views
0

我正在嘗試將更改記錄到數據庫,以便用戶可以查看誰更改了哪些內容。我正在使用DbEntityEntry來檢查並記錄已修改的DbPropertyEntity。當我想要將更改記錄到導航屬性時,我遇到了問題。我使用Reference()方法來獲得對導航屬性的引用,但不像DbPropertyEntity,DbReferenceEntry沒有OriginalValue只有CurrentValue屬性。你如何獲得導航屬性的OriginalValueDbPropertyEntry獲取原始值

//Get the field that hold the id of the foreign key 
var field = entry.Property(x => x.field); 

//Check to see if the user changed the value 
if (field.IsModified) 
{ 
    //Get the reference property associated with the field 
    var fieldRef = entry.Reference(x => x.fieldRef); 

    //Log the id change 
    Log(field.Name, field.CurrentValue, field.OriginalValue); 

    //Can't get the OriginalValue 
    Log(fieldRef.Name, fieldRef.CurrentValue, ???); 
} 

回答

1

你期望記錄什麼參考?

如果要記錄關係中的更改(=外鍵中的更改),則應將外鍵映射爲單獨的屬性,並將其記錄爲普通字段。如果你沒有映射外鍵,你有一個independent association。支持DbContext API is limited中的獨立關聯。完全支持僅在ObjectContext API中(您可以從DbContext API使用它),但它仍不能解決您的問題 - 獨立關聯無法處於修改狀態。它可以保持不變,添加或刪除狀態。如果您更改引用,則舊關聯標記爲已刪除,並添加新內容=有兩個單獨的關聯對象由上下文跟蹤。

+0

我沒有使用edmx工具,我只是創建了一個數據庫並添加了字段,然後更新了我的域對象。我正在記錄外鍵更改。問題是用戶會看到這個日誌鍵的變化沒有意義(例如TypeID從3改爲4),我需要在導航屬性中記錄更改(例如Type從Student值更改爲老師)。 – 2012-07-11 20:56:10