Dans mon application C# .NET 3.5, j'utilise CastleProject ActiveRecord sur NHibernate. C'est une application de bureau en utilisant MS SQL Server 2008. J'ai définir le délai de commande ADO à 0 pour éviter de dépassement de délai lors des opérations en vrac:Exception de délai d'expiration lorsque le délai d'attente est défini sur l'heure infinie
<activerecord>
<config>
...
<add key="hibernate.command_timeout" value="0" />
</config>
</activerecord>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
...
<property name="command_timeout">0</property>
</session-factory>
</hibernate-configuration>
Cependant, je reçois encore de dépassement de délai! Le journal NHibernate montre quelque chose comme ceci:
Quelque part au début:
2010-10-02 06: 29: 47746 INFO NHibernate.Driver.DriverBase - réglage de délai d'attente de commande ADO.NET à 0 secondes
Quelque part à la fin:
2010-10-02 07: 36: 03.020 DEBUG NHibernate.AdoNet.AbstractBatcher - Fermé IDbCommand, ouvert IDbCommand s: 0 2010-10-02 07: 36: 03382 erreur NHibernate.Event.Default.AbstractFlushingEventListener - Impossible syn état de base de données chronize avec la session NHibernate.HibernateException: Une exception a eu lieu lors de l'exécution requêtes par lots ---> System.Data.S qlClient.SqlException: le délai a expiré. Le délai écoulé s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. à System.Data.SqlClient.SqlConnection.OnError (SqlException exception, Boolean breakConnection)
Comment venir? Comment régler ceci?
cette application web je suppose? – hardba11
Désolé, n'a pas déclaré cela. Non, c'est une application de bureau ordinaire. – Alex
Utilisez-vous le traitement par lots ('adonet.batch_size'> 0)? Pourquoi avez-vous une configuration ActiveRecord * et * une configuration NHibernate séparée? Quel type d'instruction SQL expire (mise à jour/insertion/sélection/suppression)?Quelle version de NHibernate et ActiveRecord utilisez-vous? –