Ayendeのメソッド(http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx)を使用して、リスナーを持つエンティティの作成日と更新日を設定していますが、これは影響を受けるエンティティに対してそれらを設定します。作業単位内の他の何も設定しません。
したがって、たとえば、これを行うと、次のようになります。
Order order = repository.Get<Order>(1);
order.AddNote(new Note("this is a note"));
repository.SaveOrUpdate(order);
ノートは作成/更新日を取得しますが、注文は取得しません。作業単位全体に更新を表示させるための秘訣はありますか?または、更新日を設定するために、注文のプロパティを物理的に更新する必要がありますか?
違いがある場合は、S#arpアーキテクチャも使用しています。
これが私が使用しているコードブロックです:
public class AuditEventListener : IPreUpdateEventListener, IPreInsertEventListener
{
public bool OnPreUpdate(PreUpdateEvent @event)
{
var audit = @event.Entity as AuditedEntity;
if (audit == null)
return false;
var time = DateTime.Now;
Set(@event.Persister, @event.State, "UpdateDate", time);
audit.UpdateDate = time;
return false;
}
public bool OnPreInsert(PreInsertEvent @event)
{
var audit = @event.Entity as AuditedEntity;
if (audit == null)
return false;
var time = DateTime.Now;
Set(@event.Persister, @event.State, "CreateDate", time);
Set(@event.Persister, @event.State, "UpdatedDate", time);
audit.CreateDate= time;
audit.UpdateDate= time;
return false;
}
private void Set(IEntityPersister persister, object[] state, string propertyName, object value)
{
var index = Array.IndexOf(persister.PropertyNames, propertyName);
if (index == -1)
return;
state[index] = value;
}
}