我有一個使用 Entity Framework 5.0.0 的 .Net5 解決方案。我能夠將資料保存到后端 SQL 資料庫,一切都很好。但是當我嘗試使用下面的陳述句檢查是否存在記錄時,我得到一個錯誤“序列包含多個匹配元素。 ”
var status = await dbContext.Item.AnyAsync(x => x.Name == "Bread")
我不確定是什么原因造成的。任何幫助表示贊賞
我使用以下軟體包
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.0">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.0">
uj5u.com熱心網友回復:
序列包含多個匹配元素。_"
- 如果要檢索 單個物件 ,請使用
var status = await dbContext.Item.FirstOrDefaultAsync(x => x.Name == "Bread");
- 如果要檢索 串列 ,請使用
var status = await dbContext.Item.Where(x => x.Name == "Bread").ToListAsync();
- 使用
First ()或FirstOrDefault()需要來自集合或資料庫的單個值。 - 如果您確定資料庫中只有一條記錄,或者您正在使用主鍵查詢資料庫,請使用
Single/ 。SingleOrDefault()
Single() - 如果沒有回傳結果或有多個結果,則會引發例外。
SingleOrDefault() - 與 Single() 相同,但也可以處理空值。
First() - 如果沒有回傳結果,則拋出例外,否則至少回傳一個結果。
FirstOrDefault() - 當沒有結果時,FirstOrDefault() 回傳 null 而不是像 First() 那樣拋出例外。
- 如果您的查詢回傳多個元素,
SingleOrDefault則拋出例外
Sequence contains more than one matching element
FirstOrDefault忽略第二個元素并回傳第一個。
- 使用
FirstOrDefault()代替SingleOrDefault()
請參閱Enumerable.Single 和 Enumerable.First 了解更多資訊
uj5u.com熱心網友回復:
這不是應該從AnyAsync. 我懷疑您的專案結構中有某些東西(例如通過外鍵)會產生錯誤。用于ToTraceString()找出底層 SQL 查詢。
uj5u.com熱心網友回復:
我通過將所有與 EntityFramework 相關的包更新為
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.17" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.17">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.17">
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497406.html
