下面是物件
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 型別。(引數“來源”)
希望有人能幫我解決這個問題,謝謝!
uj5u.com熱心網友回復:
我的猜測是因為您嘗試同時查詢 _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;
}
}
uj5u.com熱心網友回復:
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 方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368404.html
下一篇:Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException:'資料庫操作預計會影響1行,但實際上影響了2行
