开发者

DbTransaction and DbConnection when working with EF4

开发者 https://www.devze.com 2023-02-08 17:41 出处:网络
I\'m trying to implement a Unif Of Work around ObjectContext of EF4 in a web application. The UoW is an HttpModule. What I need is to get the current transaction for the connection. When an http reque

I'm trying to implement a Unif Of Work around ObjectContext of EF4 in a web application. The UoW is an HttpModule. What I need is to get the current transaction for the connection. When an http request first commes I start the transaction on the objectContext with context.Connection.BeginTransaction(). On the request end I need to retrieve the current transaction for the connection but there is no property to do that on the Connection object. I made the following code to achieve it but it doesn't work.

private DbTransaction GetTransaction()
             {
                      if (_currentTransaction == null)
                      {
                               var command = GetSession().Connection.CreateCommand(); // just to get the current transaction
                               if (command.Transaction != null)
                                        _currentTransaction = command.Transaction;
                               else
                                        _currentTransaction = GetSession().Connection.BeginTransaction();
                      }

                      return _currentTransaction;
             }

I don't understand why the command.Transaction is always null. If I try to do GetSession().Connection.BeginTransaction() I get the exception that the transation already exists and can't start several transactions in parrallel.

Get开发者_Go百科Session() retrives just the current EF ObjectContext from HttpContext.Current.Items. ObjectContext is stored there on beginRequest.

If you give me some guidance I will appreciate.

Thanks.


ObjectContext.Connection isn't your store connection; it's an EntityConnection.

You probably want TransactionScope. If you want to start a transaction on the store only, then you want ((EntityConnection)Context.Connection).StoreConnection.

0

精彩评论

暂无评论...
验证码 换一张
取 消