2011-10-17 166 views
0

我有一個使用EF4的Web應用程序。我有點新的EF和現在正在努力實施變革Audit.I試圖通過捕獲上下文類的SavingChanges事件如下實體框架4更改審計

partial void OnContextCreated() 
     { 
      this.SavingChanges += new EventHandler(TicketContainer_SavingChanges); 

     } 

因此事件處理程序可通過以下

訪問已變更記錄要做到這一點
this.ObjectStateManager.GetObjectStateEntries(
      EntityState.Added | EntityState.Modified); 

這工作正常,我正在創建所選表的列級審計。每個表/實體都有一個ID字段,它是具有columnName =「ID」的標識符。因此,在我的審計例程中,我只是通過名稱爲「Id」的列訪問數據以獲取審計記錄的ID。

我面臨的問題是在插入過程中。新記錄沒有ID,因爲它是數據庫中的標識列,並且始終爲0.

我能想到的一種解決方案是對所有Ids使用GUID.But是否有一種方法可以使用標準的int32標識IDS?

感謝

回答

0

我不,我們現在有多少實體但是你只有在我們自己實施跟蹤審計的創建爲每個實體具體審覈的實體,所以我們可以將它們關聯起來低谷的導航性能,讓數據庫集身份密鑰。

如果您爲審計實體使用繼承,則可以輕鬆查詢它們。

希望這有助於:)

+0

嗨Wouter感謝您的答覆。我沒有完全理解你的建議。但可能你正在創建一個Fkey從審計表到你的實際表,因爲你有1審計表每個實體。但在我的情況下,我只有一個跨所有實體的單一審計表 – josephj1989

+0

爲什麼您僅限於一個表?如果使用TablePerHierarchy繼承,則仍然可以將整個繼承層次結構放在表上。例如,您將具有帶有TargetPerson屬性和TargetPersonId(FK)的PersonAudit類型以及具有屬性TargetOrder和TargetOrderId的OrderAudit –

0

插入時不生成標識列。插入數據後,只有您可以在EF中獲取標識列數據。所以,你可以嘗試一些解決方法,在插入後獲取Id,然後用該Id填充審計表。