Транзакционный SaveChangesAsync в EF

откройте свой php.ini, убедитесь, что он установлен:

display_errors = On

перезагружает ваш сервер.

1
задан MrScf 11 March 2019 в 13:30
поделиться

2 ответа

tasks.Add(await MyContext.SaveChangesAsync(););

должно быть без ожидания

tasks.Add(MyContext.SaveChangesAsync());

И ваш код начинает работать. (выражение await возвращает асинхронный результат, без await возвращает задание, которое будет выполнено позже) Но, как уже упоминалось, не следует выполнять SaveChangesAsync () каждый раз, когда объект добавляется в контекст, это может быть сделано для всех добавленных объектов за один раз. [ 113]

0
ответ дан Oleg Bondarenko 11 March 2019 в 13:30
поделиться

Если вы точно не уверены в том, что делаете, я не предлагаю вам обрабатывать исключение, возвращая 0. Я всегда предпочитаю обрабатывать исключение на самом внешнем стеке и регистрировать исключение, а затем предпринимать надлежащие действия. И если это возможно, я предлагаю вам использовать промежуточное программное обеспечение для обработки ошибок (это зависит от используемой вами структуры, подхода и ситуации).

С другой стороны, вам не нужно обновлять каждый объект один за другим. Вы можете позвонить SaveChangesAsync после всех выполненных операций.

try
{
    foreach (Person person in persons)
    {
        person.Status = Status.Finish;
        person.Changed = DateTime.Now;
        person.Role = Role.Worker;
        MyContext.Persons.AddOrUpdate(person);
    }

    var affectedRows = await MyContext.SaveChangesAsync();
    return (int)(persons.Count == affectedRows);
}
catch (EntityCommandExecutionException ex)
{
    return 0;
}
0
ответ дан Derviş Kayımbaşıoğlu 11 March 2019 в 13:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: