我有一个人员表和一个物品表,其中每个人都拥有一个人,每个人都有一个喜欢的人。
Persons
PersonID int <PK>
FavoriteThingID int <FK>
Things
ThingID int <PK>
PersonID int <FK>
我希望能够在单个事务中添加Person和他/她最喜欢的Thing,以及将Thing的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()调用中的“ 无法确定依赖操作的有效排序。 ”异常。
有一种简单的方法吗?
由于
答案 0 :(得分:0)
您不需要TransactionScope
。您可以通过一次调用SaveChanges
来执行此操作,这意味着一次交易。
Person p = ent.CreateObject<Person>();
p.FavoriteThing = ent.CreateObject<Thing>();
ent.Persons.AddObject(p);
ent.SaveChanges();