Olá, Rui!
Para o primeiro caso, podes ter uma coluna chamada, por exemplo,
DATA_CRIACAO com um valor default que devolva a data e hora, no caso
do SQL Server, GETDATE(). Desta foma, passas a responsabilidade para o
servidor.
No segundo caso, cuja solução, aliás, também podes usar para o
primeiro, tens de usar um listener. Um listener pode ser registado no
ficheiro .config ou via código, por exemplo:
No .config:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
...
<listener class="MyUpdateListener, MyAssembly" type="update"/>
</session-factory>
</hibernate-configuration>
Por código:
Configuration cfg = ...;
cfg.EventListeners.UpdateEventListeners = new [] { new
MyUpdateListener() };
public interface IAuditableEntity
{
DateTime CreatedAt { get; set; }
DateTime UpdatedAt { get; set; }
}
public class MyUpdateListener: DefaultUpdateEventListener
{
protected override Object PerformSaveOrUpdate(SaveOrUpdateEvent
@event)
{
//a tua logica
IAuditableEntity entity = @event.Entity as IAuditableEntity;
if (entity != null)
{
entity.UpdatedAt = DateTime.Now;
}
return(base.PerformSaveOrUpdate(@event));
}
}
Não te esqueças de que a tua entidade deve implementar
IAuditableEntity, caso contrário, tens de usar reflection.
Boa sorte!
RP