Подавление зачисления TransactionScope только для чтения контекста EF? - PullRequest
4 голосов
/ 24 августа 2010

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

Я бы хотел избежать обновления TransactionScope до распределенной транзакции, поэтому мне не нужно беспокоиться о MSDTC ... есть ли способ включить в транзакцию только один контекст?

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Я не уверен, будет ли это включать второе соединение в транзакцию, но вы можете попытаться подавить транзакцию по своему выбору:

using (new TransactionScope(TransactionScopeOption.Suppress))
{}
1 голос
/ 03 сентября 2010

Я рассматривал аналогичную проблему с Linq для Sql - изначально наше решение заключается в том, чтобы использовать одно и то же соединение для каждого запроса. Рик Страл написал серию постов в блоге, которые стоило посмотреть.

В нашем решении конструктор (и) DataContext имеет перегруженный конструктор, который извлекает соединение с фабрики (если соединение не существует, переданное соединение сохраняется в потоке)

public DataContext1(connection)
    : base (ConnectionFactory.GetConnectionFromContext(connection))
{
}

Кажется, что это нормально работает в сценарии WCF, фабрика соединений может сохранять / извлекать из коллекции ServiceModel.OperationContext.Items и (что более важно) подписываться на событие OperationComplete для закрытия / удаления соединения в потоке когда все операции выполнены.

Я обнаружил, что нам также необходимо расширить объект соединения, чтобы вы могли предотвратить автоматическое закрытие / дипозал внутреннего соединения, когда располагаются текстовые данные-владельцы (например, после завершения каждой области действия).

Сейчас я смотрю на сценарии, не относящиеся к WCF ... ТБХ, это не красиво. У нас также нет триггера события OperationCompleted, который есть в контексте WCF.

...