[NHibernate] propriedades automáticas

3 views
Skip to first unread message

Rui Santos

unread,
Jul 2, 2010, 11:46:31 AM7/2/10
to nh...@googlegroups.com
Olá a todos,

Estou a fazer o meu primeiro teste do NHibernate como ORM como o objectivo de produção.
Surgiu uma dúvida que talvez me possam ajudar. Pretendo ter, nalgumas tabelas, dois campos adicionais que indicam a data em que o registo foi inserido e a última data em que foi alterado. Existe alguma forma de gerir esta situação com o NHibernate?

Cumprimentos,
Rui

Ricardo Peres

unread,
Jul 2, 2010, 12:28:40 PM7/2/10
to NHibernate Portugal
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

Ricardo Peres

unread,
Jul 6, 2010, 1:37:42 PM7/6/10
to NHibernate Portugal
Reply all
Reply to author
Forward
0 new messages