NHibernate: how to set connection timeout
Asked Answered
T

3

14

Is there any way to globally setup time you would wait for connecting to a given database, before a connection failure in NHibernate (connection timeout)? In ADO.NET you can do it for a single connection like this:

new SqlConnection().ConnectionTimeout = 10;

I found how to setup the time you would wait for a result set, before a command execution failure here (command timeout). But, apparently, that's not what I need

Tother answered 6/7, 2015 at 9:5 Comment(0)
F
12

You can set it on the connection string, "Connection Timeout=x".

Formicary answered 6/7, 2015 at 13:35 Comment(3)
It is the simpliest way to solve the problem in my case. In some other cases may be better to write a custom connection provider and programatically set IDbConnection.ConnectionTimeout propertyTother
Note that 'x' here is time expressed in seconds.Cynarra
Isn't this property to specify the time to successfully make a connection not for the time to run queries?Neutretto
R
20

You can use the connection_timeout setting in your NHibernate configuration code. See section 3.4 of the documentation for full details.

The XML configuration for this is as follows...

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
        <property name="connection.connection_string">
            Server=(local);initial catalog=theDb;Integrated Security=SSPI
        </property>
        <property name="connection_timeout">100</property>
    </session-factory>
</hibernate-configuration>

<!-- other app specific config follows -->

I'm using Fluent NHibernate so my configuration code is as follows...

FluentConfiguration configuration = Fluently.Configure()
                         .Database(MsSqlConfiguration.MsSql2012.ConnectionString(ConnectionString))
                         .ExposeConfiguration(cfg => cfg
                            .SetProperty("connection_timeout", "100")
                         .Mappings(m =>
                         {
                             var cfg = CreateAutomappings();
                             m.AutoMappings.Add(cfg);
                         });
Row answered 6/7, 2015 at 9:12 Comment(5)
There is a difference between a command timeout and a connection timeout. Please refer here. The code you've provided, sets the command timeout, but I need a way to set the connection timeoutTother
Connection Timeout != Command Timeout i.e. connection timeout is the time of waiting connection available but command timeout is the max command execution timeFunctionary
as others have stated, we are looking for connection timeout, not command timeout. your answer is misleading and can cause someone to change the wrong setting, that's why i down-voted.Overwinter
Yes, in answering I originally typed command not connection - an easily made mistake I guess. Didn't bother editing as I felt somebody experienced enough to be using NHibernate would figure out the connection_timeout setting lives alongside its command equivalent. However, some people seem disproportionately vexed - even 5 years later - so, for their benefit, I've finally updated it.Row
There is no such setting as connection_timeout.Terpsichore
F
12

You can set it on the connection string, "Connection Timeout=x".

Formicary answered 6/7, 2015 at 13:35 Comment(3)
It is the simpliest way to solve the problem in my case. In some other cases may be better to write a custom connection provider and programatically set IDbConnection.ConnectionTimeout propertyTother
Note that 'x' here is time expressed in seconds.Cynarra
Isn't this property to specify the time to successfully make a connection not for the time to run queries?Neutretto
F
1

With NHibernate you can provide the connection yourself:

sessionFactory.openSession(myConnection);

I wouldn't recommend it, because it's easier when sessions are managed by NHibernate.

You can still write your own connection provider, which sets whatever you want on the created connections.

Feinstein answered 6/7, 2015 at 11:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.