在我們的數據層中使用EF(代碼優先),我們需要爲實體更改啓用審覈功能。我已經能夠弄清楚如何使用Change Tracker成功捕獲對值類型屬性的更改。我現在也相信瞭解如何獲取我需要記錄多對多關係的信息。實體框架審覈一對多關係並捕獲相關實體
我剩下的問題是如何記錄一對多關係並捕獲實體信息。
在下面的實體中讓我們假設種族已經改變。
public class Person
{
public Guid Id { get; set; }
public Guid? EthnicityId { get; set; }
public Ethnicity Ethnicity { get; set; }
}
在SaveChanges的幕後,它只給你一個關鍵值對列表,用於更改屬性。因此,您在這種情況下實際得到的是:「EntityId」,「{GUID HERE}」。我可以記錄guid改變了,但這些信息對用戶來說基本上是無用的。我需要捕獲的還有顯示名稱(我們所有的實體都在實現)以及記錄。
我能想到的唯一的事情:(免責聲明這種感覺就像一個可怕的解決方案給我)
- 看屬性名稱。
- 如果字符串以Id結尾,但不是「Id」,請將其修剪掉。
- 使用修剪後的屬性名稱字符串獲取對該類型的引用(在本例中爲Enthnicity)
- 再次使用EF通過Guid的該類型的ID進行獲取。
- 將該對象轉換爲具有DisplayName的基本類型。
- 獲取顯示名稱並將其添加到日誌。
我真的寧願不必這樣做。我無法想象此前還沒有出現。那裏有沒有什麼魔法可以暴露底層的實體鏈接?
謝謝!