2010-10-03 26 views
1

Supposons que je fasse quelque chose qui nécessite l'accès à ISession de NHibernate. Par exemple, en exécutant une requête Sql via ISQLQuery ou en exécutant LINQ-to-NHibernate via session.Linq<MyType>(). Je sais qu'il ya 2 façon d'accéder ISession:Dans ActiveRecordMediator, vous devriez utiliser Execute ou CreateSession?

  1. ActiveRecordMediator.GetSessionFactoryHolder().CreateSession()
  2. ActiveRecordMediator.Execute()

Qu'est-ce que les avantages et les inconvénients de chacun? De plus, existe-t-il d'autres moyens?

Répondre

0

Je ne peux pas penser à technique raison de préférer un sur l'autre, cependant ActiveRecordMediator.Execute est le documented way.

Si vous n'avez pas besoin de cela pour effectuer des requêtes LINQ, vous pouvez utiliser Castle.ActiveRecord.Linq à la place.

+0

Il semble que 'ActiveRecord.Execute' gère la session automatiquement, mais pas l'inverse. Il peut être la cause de préférer 'ActiveRecord.Execute' d'une autre manière dans la documentation. BTW existe-t-il des exemples/documentations sur 'Castle.ActiveRecord.Linq'? –

+0

@afsharm: bien sûr, obtenir la session vous-même implique de l'envelopper dans un bloc 'using'. Re LINQ: voir http://stackoverflow.com/questions/2967777/how-to-use-linq-with-castle-activerecord –