Oi, Felipe,
ManagedWebContext was deprecated and removed in NHibernate 4, so you should
be using WebContext instead.
So, you are "playing" with the connection directly... may I ask why don't
you use the CreateSQLQuery method instead?
It is not visible in your code sample, but there's an overload to the
ExecuteReader method of DbCommand that takes a CommandBehavior, and one of
its possible values is CloseConnection. Are you sure it isn't being used?
RP
On Wednesday, June 10, 2015 at 10:06:36 PM UTC+1, Felipe Oriani wrote:
>
> Hi Ricardo, I will give you more detail about my problem.
>
> In the Configuration to generate ISessionFactory (with FluentNH) we set
> the CurrentSessionContextClass to managed_web. We get the session using the
> sessionFactory.GetCurrentSession(). The session we bind using the
> ManagedWebSessionContext class, for sample, in the begin_request:
>
> ManagedWebSessionContext.Bind(httpContext, SessionFactory.OpenSession());
>
> It is the classical session per request (with httpContext).
>
> About the exception, this is a pluggable part of the project, and we are
> using the codeCom to do it. We want to expose a method to the customer's
> code execute sql queries in the same database of the project and get
> results. To do this, we pass the sessionFactory to the method in the
> CodeDom and take the session with GetCurrentSession method to execute
> user's sql statements. To execute the query, we try this (in the codeDom):
>
> private object ExecuteScalar(string sql)
> {
> object result = null;
>
> var session = _sessionFactory.GetCurrentSession();
> var connection = session.Connection;
>
> if (connection.State == System.Data.ConnectionState.Closed)
> connection.Open();
>
> var command = connection.CreateCommand();
>
> command.Connection = session.Connection;
>
> if (session.Transaction.IsActive)
> session.Transaction.Enlist(command);
>
> command.CommandText = sql;
> command.CommandType = System.Data.CommandType.Text;
>
> result = command.ExecuteScalar();
>
> return result;
> }
>
> This code, executes a query fine, and the ISession is open, but we
> inspected the ISession instance and we realize that the ISession.Connection
> is closed and if we try to execute any other statement using NHibernate
> resources, we get the following exception:
>
> An exception of type 'System.InvalidOperationException' occurred in
> NHibernate.dll but was not handled in user code
>
> Additional information: ExecuteReader requires an open and available
> Connection. The connection's current state is closed.
>
>
> Thank you
>
> On Wed, Jun 10, 2015 at 5:32 PM, Ricardo Peres <[email protected]
> <javascript:>> wrote:
>
>> How are you obtaining the ISession in the first place, and how are you
>> binding it to the ISessionFactory?
>>
>> RP
>>
>>
>> On Wednesday, June 10, 2015 at 8:37:24 PM UTC+1, Felipe Oriani wrote:
>>
>>> Hi,
>>>
>>> I am working in a project, where the ISession is being binding in the
>>> ISessionFactory, so, I can access it using the
>>> sessionFactory.GetCurrentSession() method. In my scenario, the customer
>>> will config a sql query to be execute to get some value from the database.
>>> I use this value to persist another entity.
>>>
>>> var session = _sessionFactory.GetCurrentSession();
>>>
>>> var value = _session.CreateSQLQuery(sqlCustomer).List();
>>> /* query execute fine and I get the result to persist another object */
>>>
>>> _session.Save(entity);
>>>
>>> The problem is when I try to Save another object, I get an exception
>>> saying that the ExecuteReader cannot be executed because the connection is
>>> closed.
>>>
>>> If I remove the call of CreateSQLQuery, it works fine. Does anybody
>>> knows, how can I fix it to keep the connection open?
>>>
>>> Thank you.
>>>
>>>
>>> --
>>> ______________________________________
>>> Felipe B Oriani
>>> [email protected]
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "nhusers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected]
>> <javascript:>.
>> Visit this group at http://groups.google.com/group/nhusers.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> ______________________________________
> Felipe B Oriani
> [email protected] <javascript:>
>
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.