我對 Entity Framework Core 和使用 SQL 非常陌生
我在資料庫中創建了一個名為“用戶”的表,每次創建新用戶時,也會生成一個新 ID,因為它是主鍵。我希望能夠在用戶登錄時保存用戶 ID,這樣如果他們將新的鍛煉添加到鍛煉表中,那么它將與他們的 ID 一起保存。
我努力了:
foreach (var field in data)
{
if (context.User.Any(user => user.Name == UserName && user.Password == PassWord))
{
int UserID = context.User.Any(user => user.Id = UserID);
}
但我仍然不完全知道查詢是如何作業的
請幫我。
uj5u.com熱心網友回復:
Any 回傳一個布林值。
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.any?view=net-6.0
因此,您的第一個陳述句中的 .Any 是“技術上沒問題”,但您最終會進行 2 次檢查以找到物件(您的“用戶”)......而您的第二個 Any 似乎不正確。
見下文:
https://www.learnentityframeworkcore.com/dbset#retrieving-an-entity
所以你可能想試試 FirstOrDefault
(以下是來自上面“學習efcore”網站的修改版。
int primaryKey = 0;
using (SampleContext context = new SampleContext())
{
Author foundAuthor = context.Authors.FirstOrDefault(a => a.LastName == "Shakespeare");
if (null != foundAuthor)
{
primaryKey = foundAuthor.AuthorKey;
}
}
你也可以試試
單一或默認
如果找到超過 1 行,“Single”將引發例外。(您的代碼原樣存在查找多個匹配項的缺陷……也許您對用戶名有唯一約束……但此處未顯示。
旁注:
你的“for”回圈..看起來很危險。您檢查匹配的用戶 ID 多少次?
將密碼作為純文本保存在資料庫中是一個可怕/危險/安全問題。
uj5u.com熱心網友回復:
不要使用.Any,使用.FirstOrDefault和檢查null。如果您的用戶不是null,您可以訪問該Id屬性
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491091.html
