TransactionScope EF Net Core RollBack в цикле foreach завершен - PullRequest
0 голосов
/ 07 декабря 2018

это две мои функции для импорта записей в мою БД, откат не выполняется, и я специально совершил ошибку, чтобы проверить это.Моя идея, когда вызов http или контент не удается, импортируются полный класс, то есть каждый цикл Foreach

public async Task SeedAllAsync()
{
    List<ClassRoom> classrooms = new List<ClassRoom> 
    {
        DataStore.ClassRooms.GetById("Class1")),
        DataStore.ClassRooms.GetById("Class2")),
        DataStore.ClassRooms.GetById("Class3"))
    };
    foreach (ClassRoom c in classrooms) 
    {               
        using (TransactionScope txscope = 
                new TransactionScope(   TransactionScopeOption.RequiresNew, 
                                        TransactionScopeAsyncFlowOption.Enabled))
        {
            try 
            {                                       
                Task task = SeedStudents(c);
                await task;        
                txscope.Complete();                        
            }
            catch (MyAppError p) {
                Console.WriteLine("LOG MyAppError : " + p.Message);                        
            }
            catch (Exception e) {
                Console.WriteLine("LOG Exception : " + e.Message);                        
            }
        }
    }
}


private async Task SeedStudents(ClassRoom cr)
{   
    List<Student> listStudents = await CallerHttpAsync.GetStudents(cr.id); 
    foreach (Student est in listStudents) 
    {
        //***********************************************************
        //All Classrooms have 10 Students
        if (cr.id == 2 && est.Name.Contains("Adam"))
            throw new MyAppError("Error purposely caused for the second loop and the student Adam");
        //Adam would be the fifth student 
        //***********************************************************
        cr.Add(student);                
    }
    Ds.SaveChanges();
}

Я перепробовал все, Database.BeginTransaction (), EnlistTransaction, Database.AutoTransactionsEnabled= false, поместите TransactionScope внутри SeedStudents, а также одновременно и внутрь и наружу.

ОБНОВЛЕНИЕ : На самом деле, я думаю, что фиксация третьего цикла сохраняет изменения, которые былиполовина второго цикла.Прикрепленный бутон не сохранен.

Пожалуйста, предположите, что что-то не так

Заранее спасибо

ОБНОВЛЕНИЕ : Пример 1) foreach import правильно "Class1" 2)При импорте цикла "Class2" произошла ошибка (в контексте не осталось ни одной строки импорта) 3) При импорте цикла "Class3" импортируются данные ученика из class2 (есть моя проблема)

...