Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
1339 / 919 / 264
Регистрация: 08.08.2014
Сообщений: 2,763
.NET 8

EF: странная работа асинхронных методов

25.03.2025, 10:48. Показов 1494. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добавлено через 42 минуты
А, всё, вопрос закрыт. Как обычно - невнимательность. В реализации 'DbConnectionInterceptor' (для EF-контекста) забыл переопределить асинхронную версию метода 'ConnectionOpened'.

--
Есть четыре вызова, выполняемые на одной и той же строке подключения, на одной и той же таблице в одном и том же состоянии и без каких-либо конкурентных вызовов. Каждый, для теста, выполняется отдельно от остальных (хотя, можно и последовательно, на странном результате это не сказывается):
C#
1
2
3
4
5
6
7
8
9
10
11
//[1]
var item = GetItem(id); //внутри реализация через синхронные Command и Reader
 
//[2]
var item = await GetItemAsync(id); //внутри реализация через асинхронные Command и Reader
 
//[3]
var item = ctx.Items.FirstOrDefault(it => it.Id == id);
 
//[4]
var item = await ctx.Items.FirstOrDefaultAsync(it => it.Id == id);
Первые три - всегда ок, возвращают найденную запись.
Последний - всегда возвращает 'null'.

SQL-запрос во всех случаях одинаковый.
Почему последний вариант не работает?

И даже вот так он всегда возвращает 'null':
C#
1
var item = await ctx.Items.FirstOrDefaultAsync();
И тут вот тоже, первый вариант - ок, количество записей, второй вариант - всегда ноль (опять же - запрос одинаковый в обоих случаях):
C#
1
2
3
var count = ctx.Items.Count();
 
var count = await ctx.Items.CountAsync();
С добавлением записи похожая проблема - напрямую через 'Command' всё ок (причём, использую один-в-один запрос, генерируемый EF для чистоты эксперимента).

Через синхронный метод тоже ок, запись сохраняется в БД, ID в EF-сущности обновляется:
C#
1
2
ctx.Items.Add(item);
ctx.SaveChanges();
А асинхронный метод, ровно в тех же условиях, с генерацией полностью аналогичного запроса, возвращает ошибку:
C#
1
await ctx.SaveChangesAsync();
Code
1
2
The database operation was expected to affect 1 row(s), but actually affected 0 row(s); 
data may have been modified or deleted since entities were loaded.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2025, 10:48
Ответы с готовыми решениями:

Принцип работы асинхронных методов Socket
часто возникают не очень понятные ситуации при отладке программ, призванные передавать данные посредством класса Socket: чаще всего, когда...

Тонкости TCP сервера приложений (преимущества и недостатки синхронных и асинхронных методов)
Есть ли преимущество у метода BeginAcceptTcpClient() перед синхронным AcceptTcpClient если его можно легко превратить в неблокирующий: ...

Очерёдное выполнение асинхронных методов
Появилась нужда (и не единожды) выполнять асинхронные функции по очереди, то есть не запускать все одновременно, а действовать...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2025, 10:48
Помогаю со студенческими работами здесь

Синхронизация асинхронных методов
Добрый день! Подскажите какие есть методы синхронизации асинхронных операций? Например, метод socket.BeginSend(...) инициирует...

Проблема асинхронных методов на IIS
Ребят, есть такая конструкция: Task.Run(() => { Upload(fuStatut,...

Что в середине асинхронных методов Begin?
Разобрался как писать серверную часть на Сокетах с использованием асинхронных методов, а до этого писал многопоточный синхронный сервер, у...

Применение асинхронных методов к выводу на консоль двух таблиц
Всем привет. Вот мне интересно: можно ли применить async и/или await к выводу на консоль двух таблиц (столбцов Name, например)? Я в этой...

Как убедиться в завершении асинхронных методов
Добрый день, У меня есть консольное приложение (выжимка кода ниже), которое в цикле проходит по разным компаниям (около 80-ти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru