Hi Markus,

I resolved the issue by using a custom NHibernate Connection Provider,
which ensured that NHib and my Sql code was using the same connection.

Eric

On Aug 11, 9:59 am, Markus Zywitza <[email protected]> wrote:
> No, not if the connection was provided by NH.
>
> In the code example of your initial post, you managed the connection
> explicitly. Why is it a problem then to pass an open session to
> DifferentDatabaseScope?
>
> -Markus
>
> 2009/8/11 EricP <[email protected]>
>
>
>
> > Another approach I tried was getting connection directly from
> > ActiveRecord using code:
>
> > ===========
> >                       using (var sessionScope = new SessionScope())
> >                        {
> >                                IDbConnection cn =
> > ActiveRecordMediator.GetSessionFactoryHolder()
>
> >    .CreateSession(typeof(object))
>
> >    .Connection;
>
> >                                Assert.AreEqual(cn.State,
> > ConnectionState.Open);
>
> > ============
>
> > But once again the connection returned by CreateSession(typeof
> > (object)).Connection is Open.  Is there a way to get a connection from
> > AR without it being Open.
>
> > Eric
>
> > On Aug 7, 3:20 pm, EricP <[email protected]> wrote:
> > > Thank you for suggestion.
>
> > > I tried out DifferentDatabaseScope and it does seem to work.  I did
> > > find an issue.  DifferentDatabaseScope seems to require an open
> > > connection.
>
> > > I wrote a simple test:
>
> > > ======================================
> > > public void DifferentDatabaseScope_Requires_Open_Connection()
> > > {
> > >         IDbConnection cn = XConnectionFactory.GetCn();  //Not opened
>
> > >         using (new DifferentDatabaseScope(cn))
> > >         {
> > >                 var Customer = new Customer(...);
> > >                 customer.Save();    //Get exceptioin
> > >         }
>
> > > }
>
> > > ===================================
>
> > > On the line with "customer.Save()" - there is exception:
> > > System.InvalidOperationException: ExecuteReader requires an open and
> > > available Connection. The connection's current state is closed.
>
> > > Since I use SessionScope per HTTP request approach, I think it would
> > > be better not to keep the connection open during the duration of the
> > > Http Request.  SessionScope seems to only open the connection when it
> > > is needed.  Is there a way to use DifferentDatabaseScope in the same
> > > way?
>
> > > Eric
>
> > > On Aug 6, 11:44 pm, Mauricio Scheffer <[email protected]>
> > > wrote:
>
> > > > Take a look at DifferentDatabaseScope.
>
> > > > Here's the testcase for reference:
> >https://svn.castleproject.org/svn/castle/trunk/ActiveRecord/Castle.Ac...
>
> > > > On Aug 6, 10:43 pm, EricP <[email protected]> wrote:
>
> > > > > In my project we have some older modules written using straight
> > > > > ADO.NET <http://ado.net/> and some newer modules that use Castle
> > Active Record.  In
> > > > > several places where ADO.NET <http://ado.net/> code and NHibernate
> > code are used in the
> > > > > same TransactionScope - I started getting errors that MSDTC is not
> > > > > available.
>
> > > > > Here is the sample code that results in exception:
>
> > > > > ===========================
>
> > > > > using (var scope=System.Transactions.TransactionScope())
> > > > > {
>
> > > > >    using(var connection = new SqlConnection(connectionString))
> > > > >    {
> > > > >         cn.Open();
>
> > > > >         //Make some changes using ADO.NET <http://ado.net/>
> > > > >         string insertQuery = @"insert into employee ....";
> > > > >         SqlCommand cmd = new SqlCommand(insertQuery, cn);
> > > > >         cmd.ExecuteNonQuery();
>
> > > > >         // Make some changes using AR session
> > > > >         using (new SessionScope())   //Need to pass cn in here
> > somehow
> > > > >         {
> > > > >                 var Customer = new Customer(...);
> > > > >                 customer.Save();        //Get exception that "MSDTC
> > on
> > > > > server '...' is unavailable."
> > > > >         }
>
> > > > >    }
>
> > > > >    scope.Complete();
>
> > > > > }
>
> > > > > ===================
>
> > > > > This occurs because ADO.NET <http://ado.net/> code is using one
> > connection, while
> > > > > ActiveRecord creates another one.
> > > > > If I used NHibernate directly I could probably call
> > > > > SessionFactory.OpenSession(cn); with my ADO.NET 
> > > > > <http://ado.net/>connection to get
> > > > > around MSDTC issue.
>
> > > > > How would I do the same for ActiveRecord?
>
> > > > > Eric
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/castle-project-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to