0

使用 Entity Framework (4.3.1.0) 处理项目。我试图弄清楚如何使我的代码作为事务工作,但对我来说,事务失败后我的模型似乎没有更新。

让我演示给你看:

using (TransactionScope trans = new TransactionScope())
{
    _database.Units.Add(new Unit{ ... });
    var a = false;
    if (a)
    {
        trans.Complete();
        Refresh();
    }
}

Refresh();

我的经验是,在事务范围完成后,它不会回滚到以前的状态。当我运行刷新方法时,我会遍历 Units 中的所有项目并将值插入到一个 ObservableCollection 中,我在 WPF 窗口的屏幕上显示它。

此机制适用于我成功执行事务时,但是当我运行上面的代码时,网格会使用新添加的单元更新,但在事务后运行 Refresh 后它并没有消失。

我觉得我在这里做的事情根本上是错误的:)

4

1 回答 1

2

实体框架不支持内存中跟踪实体的事务 - 您在 ObjectContext 中看到的“ObjectStateManager”不是事务资源。TransactionScope 仅“适用于”在其中完成的数据库操作(查询、更新),而不适用于内存中的操作,例如操作对象图(这就是您所做的)。

于 2012-06-25T07:33:33.380 回答