이벤트 청취자를 사용하여 감사 로깅을 구현할 때 nhibernate에서 링크 엔터티 (외래 키) 값을 가져 오는 방법. 링크 엔티티를 제외하고 모든 엔티티 속성을 로그 할 수 있습니다. 링크 엔티티는 값 대신 링크 엔티티의 이름 만 로깅합니다.NHibernate - 감사 로깅 목적으로 postinsert 이벤트에서 연결된 엔터티 값을 얻는 방법
누군가가 올바른 방향으로 나를 가르키거나 샘플 코드를 제공하면 좋을 것입니다. 내가 현재 가지고있는 것입니다.
public void OnPostInsert(PostInsertEvent @event)
{
if (@event.Entity is AuditLog)
{
return;
}
ISession session = @event.Session.GetSession(EntityMode.Poco);
string username = httpContextHelper.GetCurrentUsersLoginName();
var props = @event.State;
for (int i = 0; i < props.Length; i++)
{
string newValue = string.Empty;
//Tried this but obj always null............
//var obj = props[i] as INHibernateProxy;
//if (obj != null)
//{
// newValue = obj.HibernateLazyInitializer.Identifier.ToString();
// session.Evict(props[i]);
//}
newValue = (props[i] == null) ? string.Empty : props[i].ToString();
if (props[i] != null)
{
session.Save(new AuditLog
{
AuditEntryType = "Insert",
DomainFullName = @event.Entity.GetType().FullName,
DomainShortName = @event.Entity.GetType().Name,
OldValue = string.Empty,
FieldName = @event.Persister.PropertyNames[i],
NewValue = newValue,
DomainId = (int)@event.Id,
Timestamp = DateTime.Now,
Username = username
});
}
}
}