введите ObjectQuery или ошибку DbQuery при обновлении объекта

#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.