Попытка простой транзакции с EF CTP5 & SqlServerCE4.0 == не удалась. Зачем? - PullRequest
1 голос
/ 23 января 2011

У меня есть код, который выдает исключение, когда я использую его против SqlServer CE 4.0 и внутри TransactionScope. Сначала код, потом ошибка.

// Arrange.
// ... some stuff ...
// like .. order = get order with ID #1.

// Act.
using (new TransactionScope())
{
    order.Name = name; // Update a field.
    _orderRepository.Save(order);
    _unitOfWork.Commit(); // <-- this works 100% fine.

    // Assert.
    // Reload the order so we can see if the data persisted to the DB.
    var updatedOrder = _orderRepository
    .Find()
    .Where(x => x.OrderId == 1)
    .SingleOrDefault(); <-- // this throws the exception.

    Assert.IsNotNull(updatedOrder);
    Assert.AreEqual(name, order.Name);
}

Ошибка исключения: -

System.Data.EntityException: основной провайдер не удалось открыть. ---> System.InvalidOperationException: объект соединения не может быть зачислен в сферу действия сделки.

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

Теперь я уверен, что это Одиночная транзакция , а не Распределенная транзакция ... поэтому я предполагаю, что это должно сработать?

Предложения, добрый народ?

1 Ответ

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

Мне пришлось с этим бороться, и вот возможное решение: http://fknet.wordpress.com/2011/02/25/entity-framework-problemsolution-of-default-connection-closing/

...