С помощью прослушивателя событий 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
, но похоже, что свойство Entity
классов PreUpdateEvent
и PostUpdateEvent
относится только к новому состоянию сущности.
Вот что у меня есть:
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
должен содержать предыдущие значения, но это похоже на миссию, чтобы отобразить обратно на объект. Есть ли более простой способ?