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]> 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].
> 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.
>
--
______________________________________
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].
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.