EF4, как завернуть 2 обновления в транзакции - PullRequest
4 голосов
/ 30 января 2011

У меня есть две независимые (без связи между собой) сущности. Некоторые свойства из них меняются, и затем я вызываю SaveChanges. Мне нужно заключить оба обновления в одну транзакцию, поскольку они представляют состояние моего приложения.

два обновления выполняются, как видно из SQL Profiler. Но я не вижу ни одной транзакции. Почему EF4 не создает транзакцию вокруг 2 обновлений? Как я могу этого достичь? (Я уже пробовал транзакции, но в Профилировщике транзакций не было)

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2011

Это должно работать, но вы должны делать все в правильном порядке.

Вот некоторый код sudo:

using (TransactionScope scope = new TransactionScope()) 
{ 
    //Do something with context1 
    //Do something with context2 

    //Save Changes but don't discard yet 
    context1.SaveChanges(false); 

    //Save Changes but don't discard yet 
    context2.SaveChanges(false); 

    //if we get here things are looking good. 
    scope.Complete(); 

    //If we get here it is save to accept all changes. 
    context1.AcceptAllChanges(); 
    context2.AcceptAllChanges(); 

} 

Если у вас все еще есть проблемы, отправьте ваш код.

1 голос
/ 28 апреля 2011

эй, мои записи сохраняются, даже если я не принимаю все изменения

using (TransactionScope scope = new TransactionScope())
{
    Roll rsr = new Roll();
    rsr.RoleName = "krians";
    studentEntities.Rolls.AddObject(rsr);

    Roll rsssddr = new Roll();
    rsssddr.RoleName = "kriansss";
    studentEntities1.Rolls.AddObject(rsssddr);

    //Do something with context1 
    //Do something with context2 
    var sdfsf = studentEntities.ObjectStateManager;

    //Save Changes but don't discard yet 
    studentEntities.SaveChanges(false);

    var sdfssdfdsff = studentEntities.ObjectStateManager;
    var sdsdfdsffsf = studentEntities1.ObjectStateManager;

    //Save Changes but don't discard yet 
    studentEntities1.SaveChanges(false);

    var sdsdfdsffsasdfasdff = studentEntities1.ObjectStateManager;

    //if we get here things are looking good. 
    scope.Complete();

    var sdfsf3 = studentEntities.ObjectStateManager;
    var sdfsfasdfasdf3 = studentEntities1.ObjectStateManager;
    //If we get here it is save to accept all changes. 
    //studentEntities.AcceptAllChanges();
    //studentEntities1.AcceptAllChanges();
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...