我正在使用ASP.NET Core與實體框架。Entify框架 - 異步選擇與在哪裏條件
首先,我選擇一個員工,然後滿足條件的(用於顯示的目的是什麼在起作用)所有員工:
var a = db.Employee.FirstOrDefault();
var b = db.Employee.Where(x => x.FirstName == "Jack");
現在,我嘗試同樣的,但異步:
var c = await db.Employee.FirstOrDefaultAsync();
var d = await db.Employee.Where(x => x.FirstName == "Jack");
但是,對於「WHERE」沒有異步版本,並且第二行代碼不能編譯 - 我得到一個錯誤
...不包含GetAwaiter定義...
如何進行SELECT
在這種情況下WHERE
條件?
好的,從答案我看到ToListAsync()將解決「var d = ...」行。但是,這個問題仍然存在,我之前並不知道它很重要。在這種情況下,我只是試圖選擇一組將被刪除的記錄,對於在代碼中進一步處理數據的目的,我不感興趣訪問數據。所以我修改了所有4個代碼版本,目的是同步或異步地刪除一個或多個記錄。爲什麼只有最後一個需要一個ToListAsync(),不會實際從數據庫中檢索記錄?
var a = db.Employee.FirstOrDefault();
db.Employee.Remove(a);
// db.Employee.RemoveRange(a); <- this also works?
db.SaveChanges();
var b = db.Employee.Where(x => x.FirstName == "Jack");
db.Employee.RemoveRange(b);
db.SaveChanges();
var c = await db.Employee.FirstOrDefaultAsync();
db.Employee.Remove(c);
await db.SaveChangesAsync();
var d = await db.Employee.Where(x => x.FirstName == "Jack").ToListAsync();
db.Employee.RemoveRange(d);
await db.SaveChangesAsync();
使用ToArrayAsync,ToListAsync。 – Evk
謝謝,請參閱問題的延續。 – Marko
RemoveRange將首先從數據庫中提取所有項目,然後標記爲已刪除。因此,首先調用ToListAsync是沒有害處的 - 否則它將由RemoveRange本身完成(同步)。 – Evk