[NHibernate] Informação AD-HOC ou de contexto

8 views
Skip to first unread message

Rui Santos

unread,
Jul 30, 2010, 7:10:39 AM7/30/10
to nh...@googlegroups.com
Olá a todos,

Devo dizer que tenho ficado algo surpreendido com a versatilidade do NHibernate, no entanto nem tudo são facilidades e a definição da arquitectura da aplicação, adaptada ao uso deste ORM, não tem sido pacifica.

Deixo-vos aqui alguns pontos que me suscitaram algumas reflexões, que penso partilhar com este fórum um pouco mais tarde.

- Informação calculada ou de várias tabelas.
- Listas, herança e polimorfismo 
- Dados de contexto (AD-HOC)

A razão deste post é o último ponto, que eu chamo de dados de contexto ou AD-HOC. E a questão é esta, supondo que eu tenho uma entidade A que tem, entre outras, as propriedades, NumSeq e Data. Quando crio uma nova instância do tipo A quero preencher o NumSeq com o último NumSeq existente na respectiva tabela + 1 e a Data com a data do servidor de SQL.

Em termos de arquitectura como é que resolviam esta situação?








Ricardo Peres

unread,
Jul 30, 2010, 9:37:28 AM7/30/10
to NHibernate Portugal
Olá, Rui!

Como estamos a trabalhar com POCOs, que são instanciados apenas com
new, não consegues fazer isso sem ires explicitamente à base de dados,
com Persist ou Refresh. Podes usar uma fórmula, numa propriedade do
teu domínio, para, aquando do carregamento ou refrescamento,
carregares e incrementares o valor mais recente de outra tabela.

Outra forma é usares um listener IPersistEventListener,
IPostLoadEventListener, ILoadEventListener, IPreLoadEventListener e
fazeres tu o carregamento dessa propriedade aí.

RP

Rui Santos

unread,
Jul 30, 2010, 9:53:48 AM7/30/10
to nh...@googlegroups.com
Olá Ricardo,

Obrigado pela resposta. 
Suponho que será algo como e que está exemplificado aqui: http://csharpaspnet.blogspot.com/2010/03/nhibernate-ad-hoc-sql-getdate.html

2010/7/30 Ricardo Peres <rjp...@gmail.com>

Ricardo Peres

unread,
Jul 30, 2010, 10:11:22 AM7/30/10
to NHibernate Portugal
Olá, Rui!

No caso do SQL Server podes fazer:

<property name="Data" formula="(SELECT GETDATE())" generated="always" /
>
<property name="NumSeq" formula="(SELECT MAX(NumSeq) FROM TabelaSeq)"
generated="always"/>

Quando carregares uma entidade da BD, as propriedades Data e NumSeq
vão estar populadas com os valores que tu queres.
Nota que isto só funciona quando estiveres a carregar entidades da BD,
se quiseres que, ao inserir, tenham esses valores, tens de usar ou um
listener ou um trigger ou valores default (no caso da data).

RP



On Jul 30, 2:53 pm, Rui Santos <san...@gmail.com> wrote:
> Olá Ricardo,
>
> Obrigado pela resposta.
> Suponho que será algo como e que está exemplificado aqui:http://csharpaspnet.blogspot.com/2010/03/nhibernate-ad-hoc-sql-getdat...
>
> 2010/7/30 Ricardo Peres <rjpe...@gmail.com>
Reply all
Reply to author
Forward
0 new messages