title: EntityCommandExecutionException if EF context is created from SqlConnection
body: <p>During a long running batch transaction running mostly with direct SQL statements, I would like to use a EF statement which should run as part of the current transaction. </p>
  
  <p>I looked at the constructors of DbContext and came up with the following approach:</p>
  
  <pre><code>using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ResPlannerContext"].ConnectionString))
  {
      connection.Open();
      SqlTransaction trans = connection.BeginTransaction();
      using (ResPlannerContext context = new ResPlannerContext(trans.Connection, false))
      {
          var data = context.Activities.Where(x =&gt; x.StartDate &lt; DateTime.Today);
          Console.WriteLine("Count: " + data.Count());
      }
  }
  </code></pre>
  
  <p>The good news: It compiles. The bad ones: The following exception pops up:</p>
  
  <pre><code>Message=An error occurred while executing the command definition. See the inner exception for details.
  Source=EntityFramework
  StackTrace:
     bei System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
     bei System.Data.Entity.Core.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
     bei System.Data.Entity.Core.Objects.ObjectQuery`1.&lt;&gt;c__DisplayClass7.&lt;GetResults&gt;b__6()
     bei System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
     bei System.Data.Entity.Core.Objects.ObjectQuery`1.&lt;&gt;c__DisplayClass7.&lt;GetResults&gt;b__5()
     bei System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
     bei System.Data.Entity.Core.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
     bei System.Data.Entity.Core.Objects.ObjectQuery`1.&lt;System.Collections.Generic.IEnumerable&lt;T&gt;.GetEnumerator&gt;b__0()
     bei System.Data.Entity.Internal.LazyEnumerator`1.MoveNext()
     bei System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
     bei System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.&lt;GetElementFunction&gt;b__3[TResult](IEnumerable`1 sequence)
     bei System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
     bei System.Data.Entity.Core.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute[TResult](Expression expression)
     bei System.Data.Entity.Internal.Linq.DbQueryProvider.Execute[TResult](Expression expression)
     bei System.Linq.Queryable.Count[TSource](IQueryable`1 source)
     bei ConsoleApplication3.Program.Main(String[] args) in c:\Users\sreindl\Documents\Visual Studio 2013\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs:Zeile 26.
     bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
     bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
     bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
     bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
     bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
     bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
     bei System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.InvalidOperationException
     _HResult=-2146233079
     _message=ExecuteReader erfordert, dass der Befehl über eine Transaktion verfügt, wenn die dem Befehl zugewiesene Verbindung eine ausstehende lokale Verbindung ist. Die Transaction-Eigenschaft des Befehls wurde nicht initialisiert.
     HResult=-2146233079
     IsTransient=false
     Message=ExecuteReader erfordert, dass der Befehl über eine Transaktion verfügt, wenn die dem Befehl zugewiesene Verbindung eine ausstehende lokale Verbindung ist. Die Transaction-Eigenschaft des Befehls wurde nicht initialisiert.
     Source=System.Data
     StackTrace:
          bei System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
          bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task&amp; task, Boolean asyncWrite)
          bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
          bei System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
          bei System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
          bei System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
          bei System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.&lt;Reader&gt;b__c(DbCommand t, DbCommandInterceptionContext`1 c)
          bei System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
          bei System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)
          bei System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)
          bei System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
          bei System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
     InnerException: 
  </code></pre>
  
  <p>The German exception inside (sorry for using german SQL Server :-) means: ExecuteReader requires command to have transaction when connection assigned to command is in pending local trans. </p>
  
  <p>Actually the <code>Transaction</code> property of the internal SqlCommand isn't set. </p>
  
  <p>Do you have any idea how to manage this situation?</p>