Я думаю, что Перехватчик или Событие на стороне писателя было бы правильным решением для этого. В нашем текущем проекте мы сделали нечто похожее, и оно прекрасно работает.
Используя этот подход, вы сохраняете возможность переключать базу данных ниже или отображение и можете разработать свое событие обновления из простого триггера TableUpdate, который, я думаю, должно быть сделано за несколько часов, до конкретного события обновления, содержащего все измененные данные.
EDIT:
Прежде всего, я бы не только отслеживал OnSave, но и AfterTransactionCompleted, чтобы убедиться, что транзакция завершена. Это также позволяет вам собирать все объекты TX.
Самый простой способ сделать это - переопределить объект EmptyInterceptor следующим образом:
public class EntityInterceptor : EmptyInterceptor
{
private IList<object> entities = new List<object>();
public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, NHibernate.Type.IType[] types)
{
entities.Add(entity);
return base.OnSave(entity, id, state, propertyNames, types);
}
public override void AfterTransactionCompletion(ITransaction tx)
{
if (tx.WasCommitted)
{
Console.WriteLine("Data has been inserted. Notify the reader here.");
}
entities = new List<object>();
}
}
Наиболее строгим подходом для межпроцессного взаимодействия IMO будет .net remoting. Есть несколько примеров, как это сделать. Простой можно найти здесь . Или, если вы хотите попробовать WCF, смотрите здесь . Или ищите ТАК, здесь можно найти много хороших примеров.