更新对象时键入 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()

ObjectQuery查询及方法

ObjectQuery查询及方法

使用默认值键入对象参数

不能使用“System.Data.Entity.Core.Objects.ObjectQuery”类型的实例调用

为文件或类似文件的对象键入提示?