【发布时间】:2011-08-12 09:37:57
【问题描述】:
使用 NHibernate 事件侦听器,我如何在更新发生时访问之前的实体状态,以便将替换的实体插入到我的修订表中?
在 SQL Server 中,我使用以下触发器:
CREATE TRIGGER Trg_PostChange
ON dbo.Posts
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [PostRevisions]
(...) -- columns here
SELECT RevisionId = newid(),
... -- columns here
FROM DELETED -- contains the previous row column values
END
我已经实现了PostUpdateEventListener,但似乎PreUpdateEvent 和PostUpdateEvent 类的Entity 属性仅引用新的实体状态。
这是我目前所拥有的:
public class PostEventListener : IPostUpdateEventListener
{
public void OnPostUpdate(PostUpdateEvent eventItem)
{
var post = eventItem.Entity as Post;
if (post != null)
{
var revision = new PostRevision((Post)eventItem.Entity);
eventItem.Session.Save(revision);
}
}
}
显然OldState 应该包含先前的值,但它似乎是映射回对象的任务。有没有更简单的方法?
【问题讨论】:
标签: database nhibernate fluent-nhibernate triggers event-listener