作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 NHibernate 2.1 中配置了 PreInsert 和 PreDelete 事件监听器。对于特定表上的插入和删除,我想将审计事件写入单独的审计表。
public class AuditEventListener : IPreInsertEventListener, IPreDeleteEventListener
{
private static readonly ILog Log = LogManager.GetLogger(typeof(AuditEventListener));
public bool OnPreInsert(PreInsertEvent @event)
{
if (!(@event.Entity is IAuditable))
return false;
return AuditEvent(@event.Session.GetSession(EntityMode.Poco),
true, (@event.Entity as IAuditable));
}
public bool OnPreDelete(PreDeleteEvent @event)
{
if (!(@event.Entity is IAuditable))
return false;
return AuditEvent(@event.Session.GetSession(EntityMode.Poco),
false, (@event.Entity as IAuditable));
}
private bool AuditEvent(ISession session, bool isInsert, IAuditable entity)
{
if (entity is ArticleBinding)
{
if (Log.IsDebugEnabled)
Log.DebugFormat(" audit event ({0}), entity is ArticleBinding", ((isInsert) ? "Insert" : "Delete"));
AddArticleBindingAuditEvent(session, isInsert,
(entity as ArticleTagBinding));
}
return false;
}
private void AddArticleBindingAuditEvent(ISession session,
bool isInsert, ArticleBinding binding)
{
var auditRecord = new AuditArticleBinding()
{
ArticleId = binding.ArticleId,
Action = (isInsert) ? "Add" : "Delete",
LoggedBy = string.IsNullOrEmpty(Thread.CurrentPrincipal.Identity.Name)
? "Unknown"
: Thread.CurrentPrincipal.Identity.Name
};
session.Save(auditRecord);
}
}
最佳答案
我目前正在做完全相同的事情并且遇到了同样的问题。试图保存一个新实体和 INSERT
语句甚至没有执行。我找到了一篇关于 using Pre[Update|Insert]Listeners to audit per record 的文章其中一条评论询问插入一个新实体,作者回答说需要一个子 session 。
private void AddArticleBindingAuditEvent(ISession session,
bool isInsert, ArticleBinding binding)
{
var childSession = e.Session.GetSession(EntityMode.Poco);
var auditRecord = new AuditArticleBinding()
{
ArticleId = binding.ArticleId,
Action = (isInsert) ? "Add" : "Delete",
LoggedBy = string.IsNullOrEmpty(Thread.CurrentPrincipal.Identity.Name)
? "Unknown"
: Thread.CurrentPrincipal.Identity.Name
};
childSession.Save(auditRecord);
childSession.Flush();
}
var eventListener = new AuditEventListener();
config.SetListener(ListenerType.PreInsert, eventListener);
config.SetListener(ListenerType.PreDelete, eventListener);
关于nhibernate - 在 PreInsert/PreDelete 事件监听器中保存新实体不会持久保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641689/
我在 NHibernate 2.1 中配置了 PreInsert 和 PreDelete 事件监听器。对于特定表上的插入和删除,我想将审计事件写入单独的审计表。 public class AuditE
我已经使用 PreInsertEventListener 和 PreUpdateEventListener 事件监听器在表中插入创建日期和更新日期。 我面临的问题是,当我在数据库中保存实体时,创建日期
我是一名优秀的程序员,十分优秀!