1
我使用nhibernate攔截器來比較舊狀態和實體屬性的當前狀態的值,但其中一些屬性的類型爲ICollection
,因此任何人都可以指導我如何檢查對象的類型是ICollection
如何檢查狀態對象是否爲ICollection
這是我的代碼
public void OnPostUpdate(NHibernate.Event.PostUpdateEvent @event)
{
var entityToAudit = @event.Entity as IAuditable;
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "AuditLog.txt");
using (StreamWriter sw = File.AppendText(path))
{
for (int i = 0; i < @event.OldState.Length; i++)
{
string propertyName = @event.Persister.PropertyNames[i];
if (@event.OldState[i] != null)
{
if ([email protected][i].Equals(@event.State[i]))
{
sw.WriteLine("the value of "+ propertyName + " has been changed from " + @event.OldState[i] + " to " + @event.State[i]);
}
}
else
{
if (@event.State[i] != null)
{
sw.WriteLine("the value of "+ propertyName + " has been changed from being empty to " + @event.State[i]);
}
}
}
}
}
無論如何,收藏集都有自己的「前」狀態跟蹤。通常只有一個集合的一個實例,所以你不能很容易地比較它。順便說一下,在OnPostUpdate觸發器中寫入文件時,我沒有什麼好的感覺。除了非常糟糕的性能外,想象一下使用循環文件鎖和數據庫鎖時可能會遇到的非常令人討厭的死鎖。 –