【发布时间】:2013-12-28 22:05:25
【问题描述】:
在使用事件侦听器实现审计日志记录时,如何在 nhibernate 中获取链接实体(外键)值。 我能够记录除链接实体之外的所有实体属性,它只记录链接实体的名称而不是值。
如果有人能指出我正确的方向或提供示例代码,那就太好了。 这是我目前所拥有的。
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
});
}
}
}
【问题讨论】:
标签: nhibernate logging event-listener audit