#c# #asp.net #entity-framework #linq #entity-framework-core
#c# #asp.net #структура организации #linq #сущность-структура-ядро
Вопрос:
Ниже приведен объект
namespace TestingForCw2.Shared { public class Dog { [Key] public Int32 Id { get; set; } public string DogName { get; set; } public Int32 DogAge { get; set; } } }
Это код для обновления объекта Dog в asyncrnous,
public async Tasklt;boolgt; UpdateDog(Dog dog) { try { await _appDbContext.Dog.Where(d =gt; d.Id == dog.Id).UpdateAsync(d =gt; new Dog { DogName = dog.DogName , DogAge = dog.DogAge }); return true; } catch(Exception exception) { return false; } }
Хотя по какой-то причине я получаю следующую ошибку
Ошибка : Запрос должен быть типа ObjectQuery или DbQuery. (Параметр «источник»)
Надеюсь, кто-нибудь поможет мне это исправить, спасибо!
Комментарии:
1. поделитесь своим кодом, а не скриншотом…
2. @MD.РАКИБХАСАН готово, пожалуйста, помогите мне сейчас
3. Какая это версия EF? Какая строка создает исключение? И что же
UpdateAsync
это такое ?4. Тем не менее, если вы используете EF-core вместе с библиотекой , о которой идет речь
ObjectQuery
, у вас есть библиотека, которая ожидает EF для .net framework.5. @GertArnold 5.0.12-это версия EF, и ошибка возникает в строке ожидания
Ответ №1:
Я предполагаю, что это связано с тем, что вы пытаетесь одновременно запросить _appDbContext.Соберите и обновите его одновременно. Мой подход состоял бы в том, чтобы сначала вытащить объект, который я пытаюсь изменить, изменить его реквизиты, а затем обновить его.
public async Tasklt;boolgt; UpdateDog(Dog dog) { Dog dogToUpdate = await _appDbContext.Dog.FirstOrDefaultAsync(d =gt; d.Id == dog.Id); dogToUpdate.DogName = dog.DogName; dogToUpdate.DogAge = dog.DogAge; try { await _appDbContext.Dog.UpdateAsync(dogToUpdate); await _appDbContext.SaveChangesAsync(); return true; } catch(Exception exception) { return false; } }
Комментарии:
1. это не работает для меня, я получаю ошибку в первой строке ожидания, ошибка выделена в значении dogToUpdate со словами «не удается преобразовать из ‘TestingForCw2.Shared. Система Dog’ to ‘. Linq. Выражения. Выражение Функция Собака, тестированиеforcw2.Shared.Doggt;gt;gt;»
Ответ №2:
public async Tasklt;boolgt; UpdateDog(Dog dog) { Dog dogToUpdate = await _appDbContext.Dog.FindAsync(dog.Id); dogToUpdate.DogName = dog.DogName; dogToUpdate.DogAge = dog.DogAge; try { await _appDbContext.SaveChangesAsync(); return true; } catch (Exception exception) { return false; } }
С помощью логики @JackZanardo я в основном удалил строку ожидания «UpdateAsync» и использовал метод FindAsync.