DbTransaction и DbConnection при работе с EF4 - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь реализовать Unif Of Work вокруг ObjectContext из EF4 в веб-приложении.UoW является HttpModule.Мне нужно получить текущую транзакцию для соединения.Когда http-запрос начинается впервые, я запускаю транзакцию для objectContext с context.Connection.BeginTransaction ().В конце запроса мне нужно получить текущую транзакцию для соединения, но у объекта Connection нет свойства, позволяющего это сделать.Я сделал следующий код для его достижения, но он не работает.

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;
             }

Я не понимаю, почему команда. Транзакция всегда равна нулю .Если я пытаюсь сделать GetSession (). Connection.BeginTransaction (), я получаю исключение, что переход уже существует и не может начать несколько транзакций параллельно.

GetSession () извлекает только текущий EF ObjectContext из HttpContext.Current.Items.ObjectContext хранится там в beginRequest.

Если вы дадите мне несколько советов, я буду признателен.

Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2011

ObjectContext.Connection не ваше подключение к магазину;это EntityConnection.

Вы, вероятно, хотите TransactionScope.Если вы хотите начать транзакцию только в магазине, тогда вы хотите ((EntityConnection)Context.Connection).StoreConnection.

...