0

我正在尝试通过回滚我们的数据上下文来解决问题。我们在两个不同数据库的两个数据上下文中使用一个 TransactionScope。

最后,我们要在两个数据库上保存更改,因此我们调用 .SaveChanges 但问题是当另一个数据库发生错误时,仍然保存第一个数据库上的更改。

我在那里做错了什么,第一个数据库没有回滚?

谢谢,

雅库布

     public void DoWork()
        {
            using (var scope = new TransactionScope())
            {
                using (var rawData = new IntranetRawDataDevEntities())
                {
                    rawData.Configuration.AutoDetectChangesEnabled = true;

                    using (var dataWareHouse = new IntranetDataWareHouseDevEntities())
                    {
                        dataWareHouse.Configuration.AutoDetectChangesEnabled = true;

...对数据进行一些操作 - 没有调用 savechanges()。

                        // Save changes for all items.
                        if (!errors)
                        {
// First database save.
                            rawData.SaveChanges();

// Fake data to fail the second database save.
                            dataWareHouse.Tasks.Add(new PLKPIDashboards.DataWareHouse.Task()
                                {
                                    Description = string.Empty,
                                    Id = 0,
                                    OperationsQueue = new OperationsQueue(),
                                    Queue_key = 79,
                                    TaskTypeSLAs = new Collection<TaskTypeSLA>(),
                                    Tasktype = null
                                });

// Second database save.
                            dataWareHouse.SaveChanges();

                            scope.Complete();
                        }
                        else
                        {
                            scope.Dispose();
                        }
                    }
                }
            }
4

1 回答 1

0

从这篇文章http://blogs.msdn.com/b/alexj/archive/2009/01/11/savechanges-false.aspx

尝试使用

rawData.SaveChanges(false);

dataWareHouse.SaveChanges(false);

//if everything is ok

scope.Complete();
rawData.AcceptAllChanges();
dataWareHouse.AcceptAllChanges();
于 2013-07-12T07:44:24.213 回答