Я обновил веб-приложение asp.netcore 2.x до версии 3.0, и у меня очень странное поведение с запросом LINQ для пользователей Identity: если я запускаю запрос Linq, чтобы получить пользователя Identity на основе имени пользователя, результатимеет значение null, но если я зацикливаю пользователей и применяю условие вручную, оно работает.
Приложение настроено с учетными записями «отдельных пользователей»
Я пробовал некоторые варианты запроса Linq, ноони все возвращают ноль. Если я проверю представление результатов «_Context.Users» в visualstudio, пользователи там находятся.
Рассмотрим следующий код, где _Context - это мой ApplicationDBContext, а name - это имя пользователя, которого я хочу получить. (и да, строка является правильным именем пользователя)
var user = _Context.Users.Where(u => u.UserName.Equals(name)).FirstOrDefault();
//var u2 = (from u in _Context.Users where u.UserName.Equals(name) select u).FirstOrDefault();
//var u3 = _Context.Users.FirstOrDefault(u => u.UserName.Equals(name);
//at this point user should not be null, but it is
if (user == null)
{
var users = _Context.Users;
foreach (var u in users)
{
if (u.UserName.Equals(name))
{
//if the linq does not work, we should not get here but we do
user = u;
break;
}
}
}
Я думаю, что результат запросов и цикла должен быть одинаковым, но это не так. Использование цикла - это обходной путь, но я подозреваю, что он гораздо менее эффективен, чем запрос к базе данных. Я также не уверен в развертывании моего приложения в Azure с такими странными вещами (причина, по которой я обновился, заключается в том, что развертывание в Azure не удалось из-за некоторых конфликтов).
Я не на 100%уверен, что это связано с 3.0, но запрос работал до обновления. Кажется, сама аутентификация работает правильно, я могу войти с любым пользователем.