0

データコンテキストをロールバックして状況を解決しようとしています。1 つの TransactionScope を使用し、2 つの異なるデータベースの 2 つのデータ コンテキスト内で使用しています。

最後に、両方のデータベースに変更を保存したいので、.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 に答える