2017-02-15 110 views
2

在我們的數據層中使用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改變了,但這些信息對用戶來說基本上是無用的。我需要捕獲的還有顯示名稱(我們所有的實體都在實現)以及記錄。

我能想到的唯一的事情:(免責聲明這種感覺就像一個可怕的解決方案給我)

  1. 看屬性名稱。
  2. 如果字符串以Id結尾,但不是「Id」,請將其修剪掉。
  3. 使用修剪後的屬性名稱字符串獲取對該類型的引用(在本例中爲Enthnicity)
  4. 再次使用EF通過Guid的該類型的ID進行獲取。
  5. 將該對象轉換爲具有DisplayName的基本類型。
  6. 獲取顯示名稱並將其添加到日誌。

我真的寧願不必這樣做。我無法想象此前還沒有出現。那裏有沒有什麼魔法可以暴露底層的實體鏈接?

謝謝!

回答