Как обернуть операцию циклической ссылки в одну транзакцию, используя Entity Framework 4? - PullRequest
0 голосов
/ 23 июня 2010

У меня есть таблица лиц и таблица вещей, где каждая вещь принадлежит человеку, а у каждого человека есть любимая вещь.

Persons
   PersonID int <PK>
   FavoriteThingID int <FK>

Things
   ThingID int <PK>
   PersonID int <FK>

Я хотел бы иметь возможность добавить Person и его / ее любимую Thing, а также установить Personing Thing's PersonID для нового Person в одной транзакции, без использования DTC для продвижения транзакции для распространения. Перенос операции в TransactionScope () и ручное управление подключением к сущности не работает:

        ThingEntities ent = new ThingEntities();

        using (TransactionScope scope = new TransactionScope())
        {
            ent.Connection.Open();

            Thing t = ent.CreateObject<Thing>();

            ent.Things.AddObject(t);

            ent.SaveChanges(false);

            Person p = ent.CreateObject<Person>();
            t.Person = p;
            ent.Persons.AddObject(p); 
            p.FavoriteThing = t;

            ent.SaveChanges(false);

            scope.Complete();

            ent.AcceptAllChanges();
            ent.Connection.Close();
        }

В результате возникает " Невозможно определить действительный порядок для зависимых операций. " исключение при втором вызове SaveChanges ().

Есть ли простой способ сделать это?

Спасибо

1 Ответ

0 голосов
/ 23 июня 2010

Вам не нужно TransactionScope для этого. Вы можете сделать это за один вызов SaveChanges, что означает одну транзакцию.

Person p = ent.CreateObject<Person>();
p.FavoriteThing = ent.CreateObject<Thing>();
ent.Persons.AddObject(p); 
ent.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...