Как запустить два контекста Entity Framework внутри TransactionScope без MSDTC?
===============================================================================

 Эта проблема не является легко воспроизводимой в простом примере здесь, но было интересно, если у кого-нибудь есть опыт и советы, вот проблема: 

* используя **Entity Framework**
* имеет много точек в приложении, где (1) данные записываются в некоторую таблицу **сущностей,** например, Customer, (2) данные записываются в таблицу **истории**
* **оба** эти действия используют Entity Framework, ОДНАКО, они используют **разные** контексты
* эти действия должны выполняться одновременно в **одной транзакции** : то есть, если одно не удается записать, другое не должно писать и т. д.
* Я могу обернуть их с TransactionScope,

 как это: 

```
using (TransactionScope txScope = new TransactionScope()) {
    ...
}

```
  но это дает мне: 

>  Координатор распределенных транзакций Microsoft (MSDTC) отключен для сетевых транзакций. 
> 
> 

 **Администратор** нашей базы данных сказал мне, что **MSDTC** отключен по выбору и **не может быть установлен** . 

 Поэтому я делаю изменения, пытаясь создать свой собственный EntityConnection с MetadataWorkspace с идеей, что **каждый контекст будет использовать один и тот же EntityConnection** . Тем не менее, это почти невозможно попытаться заставить его работать, например, в настоящее время я продолжаю получать вышеуказанную ошибку, хотя теоретически оба контекста используют EntityConnection. Трудно понять, где и почему Entity Framework требует MSDTC, например. 

 **Кто-нибудь пошел по этому пути раньше, есть опыт или примеры кода, чтобы поделиться?** 

 Ну, проблема довольно проста. 

 Если вы используете sql server 2008, у вас не должно быть этой проблемы, потому что у вас есть продвигаемая транзакция, и, поскольку .NET знает, что вы используете то же самое постоянное хранилище (базу данных), оно не будет продвигать его в DTC и фиксировать как локальное. [Посмотрите на выгодные транзакции с SQL Server 2008.](http://msdn.microsoft.com/en-us/library/ms172070.aspx) 

 Насколько я знаю, Oracle работает в своем драйвере для поддержки способных к продвижению транзакций, но я не знаю этого состояния, драйвер MS Oracle не поддерживает его. <http://www.oracle.com/technology/tech/windows/odpnet/col/odp.net_11.1.0.7.20_twp.pdf> 

 Если вы используете драйвер, который не поддерживает продвигаемые транзакции, для .NET невозможно использовать локальную транзакцию с двумя подключениями. Вы должны изменить свою архитектуру или убедить администратора базы данных в установке MSDTC.