Database 更新后模拟。。。从具有NHibernate事件侦听器的已删除触发器

Database 更新后模拟。。。从具有NHibernate事件侦听器的已删除触发器,database,nhibernate,fluent-nhibernate,triggers,event-listener,Database,Nhibernate,Fluent Nhibernate,Triggers,Event Listener,使用NHibernate事件侦听器,我如何在更新发生时访问以前的实体状态,以便将替换的实体插入到修订表中 在SQL Server中,我使用以下触发器: CREATE TRIGGER Trg_PostChange ON dbo.Posts AFTER UPDATE AS BEGIN SET NOCOUNT ON; INSERT INTO [PostRevisions] (...) -- columns here SELEC

使用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属性似乎只引用新的实体状态

以下是我到目前为止的情况:
显然,OldState应该包含先前的值,但它看起来像是映射回对象的任务。有更简单的方法吗?

您可以尝试使用EntityPersister,如下所示:

eventItem.Persister.Load(post.Id, null, LockMode.None, eventItem.Session);

如果这不起作用,您可以始终使用不同的会话从db加载对象。

您可以尝试使用EntityPersister,如下所示:

eventItem.Persister.Load(post.Id, null, LockMode.None, eventItem.Session);

如果这不起作用,您可以始终使用不同的会话从db加载对象。

是eventItem.Persister.load。。。与eventItem.Session.Getpost.Id不同?我相信它会调用db,但是如果它没有调用,那么我认为您唯一的选择是使用不同的会话。是eventItem.Persister.Load。。。与eventItem.Session.Getpost.Id不同?我相信它会调用db,但是如果没有,那么我认为您唯一的选择就是使用不同的会话。