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 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
-~----------~----~----~----~------~----~------~--~---