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 and some newer modules that use Castle Active Record.  In
> > several places where 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
> >         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 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 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