更新对象时键入 ObjectQuery 或 DbQuery 错误
Posted
技术标签:
【中文标题】更新对象时键入 ObjectQuery 或 DbQuery 错误【英文标题】:type ObjectQuery or DbQuery Error when updating a object 【发布时间】:2022-01-04 08:40:39 【问题描述】:下面是对象
namespace TestingForCw2.Shared
public class Dog
[Key]
public Int32 Id get; set;
public string DogName get; set;
public Int32 DogAge get; set;
这是异步更新 Dog 对象的代码,
public async Task<bool> UpdateDog(Dog dog)
try
await _appDbContext.Dog.Where(d => d.Id == dog.Id).UpdateAsync(d => new Dog
DogName = dog.DogName
, DogAge = dog.DogAge
);
return true;
catch(Exception exception)
return false;
虽然由于某种原因我收到以下错误
错误:查询必须是 ObjectQuery 或 DbQuery 类型。 (参数“来源”)
希望有人能帮我解决这个问题,谢谢!
【问题讨论】:
分享你的代码而不是截图... @MD.RAKIBHASAN 完成,请立即帮助我 这是哪个 EF 版本?哪一行抛出异常?UpdateAsync
是什么?
也就是说,如果您将 EF-core 与一个谈论 ObjectQuery
的库一起使用,那么您就有一个需要 EF 用于 .net 框架的库。
@GertArnold 5.0.12 是 EF 版本,错误在 await 行抛出
【参考方案1】:
public async Task<bool> 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 方法。
【讨论】:
【参考方案2】:我的猜测是,这是因为您尝试同时查询 _appDbContext.Dog 并更新它。 我的方法是首先拉出我要更改的实体,更改其道具,然后更新它。
public async Task<bool> UpdateDog(Dog dog)
Dog dogToUpdate = await _appDbContext.Dog.FirstOrDefaultAsync(d => 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;
【讨论】:
这对我不起作用,我在第一个等待行中收到错误,错误在 dogToUpdate 值上突出显示“无法从 'TestingForCw2.Shared.Dog' 转换为 'System.Linq。表达式.Expression以上是关于更新对象时键入 ObjectQuery 或 DbQuery 错误的主要内容,如果未能解决你的问题,请参考以下文章
ObjectQuery.Include() => ObjectQuery.IncludeAll()