Ich benutze den Nhibernate Interceptor, um Werte des alten Zustandes und des aktuellen Status der Entitätseigenschaften zu vergleichen, aber einige der Eigenschaften sind vom Typ ICollection
, also könnte mich jemand über wie wenn ein Objekt zu überprüfen, der Typ ist ICollection
Wie überprüft man, ob ein Zustandsobjekt vom Typ ICollection ist
dies ist mein Code
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]);
}
}
}
}
}
Sammlungen haben ohnehin eine eigene Art von "vorheriger" Statusverfolgung. Es gibt (normalerweise) nur eine Instanz einer Sammlung, also kann man sie nicht so einfach vergleichen. Übrigens hätte ich kein gutes Gefühl beim Schreiben in eine Datei in einem OnPostUpdate-Trigger. Stellen Sie sich abgesehen von der sehr schlechten Leistung die sehr unangenehmen Dead-Locks vor, die Sie mit kreisförmigen Dateisperren und Datenbanksperren bekommen könnten. –