LINQ + WCF + Сделки - PullRequest
       7

LINQ + WCF + Сделки

2 голосов
/ 01 сентября 2010

У меня относительно простой вариант использования, который не работает. Рассмотрим следующий код:

[OperationBehavior(TransactionScopeRequired = true)]
public IEnumerable<StatusRecord> ReadActive(int contactID, bool isActive)
{
  var result = from n in ORM.Default.Table<StatusRecord>()
                where n.lng_contact_id == contactID && n.dte_effective_end == null
                select n;

  return result;
}

Это использует пользовательский поставщик LINQ-SQL нашего собственного злого происхождения. Обычно этот тип вызова прекрасно работает, но при использовании его из вызова WCF с транзакционным кодом DTC он зависает. Моя теория состоит в том, что сериализация результата в массив так или иначе происходит вне области транзакции и поэтому зависает. Кроме того, моя теория подтверждается тем фактом, что изменение линии

return result;

до

return result.ToArray();

заставляет вещи работать. Хотя я рад, что есть обходной путь, кажется, есть лучший способ добиться такого поведения. Пожалуйста, порекомендуйте. Спасибо!

1 Ответ

1 голос
/ 02 сентября 2010

Не использовать отложенное выполнение в операции WCF.Вы должны выполнить свой запрос перед возвратом результата - это то, что вы сделали в result.ToArray ().

...