You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EntityFrameworkCore+SQLite如何获取登录用户Id并存入变量

解决方案

你的代码存在几个明显的EF Core使用错误,按下面的方式调整即可实现需求。

原代码问题说明

  • Any()方法仅返回bool类型结果(表示是否存在匹配数据),无法直接返回用户Id,赋值给int类型变量会直接触发编译错误
  • 表达式user.Id = UserID是赋值操作而非相等判断,且此时UserID变量尚未完成定义,属于非法调用
  • 连续两次调用Any()会重复访问数据库,属于不必要的性能开销
  • 外层包裹的foreach (var field in data)循环没有实际作用,单用户登录校验不需要遍历集合做重复匹配

登录时获取用户Id的正确写法

不需要分两次判断存在性再查Id,直接一次查询拿到匹配的用户实体即可,匹配成功后直接从实体中取主键Id:

// 查询用户名、密码匹配的用户,无匹配结果时返回null
var matchedUser = context.User
    .FirstOrDefault(u => u.Name == UserName && u.Password == PassWord);

if (matchedUser == null)
{
    // 此处写登录失败逻辑,比如返回"用户名或密码错误"提示
    return;
}

// 直接从匹配到的用户实体中取主键Id,无需二次查询
int currentUserId = matchedUser.Id;
// 你可以把currentUserId存在会话、Cookie或者当前上下文变量中,供后续业务逻辑使用

新增训练记录时关联用户Id

后续给Workout表新增数据时,直接把之前拿到的currentUserId赋值给Workout实体对应的用户外键字段即可:

var newWorkoutRecord = new Workout
{
    UserId = currentUserId, // 关联登录用户的Id
    // 其余字段按你的业务需求赋值,比如训练时长、训练类型、创建时间等
    CreateTime = DateTime.Now,
    Duration = 60,
    Type = "有氧训练"
};

context.Workout.Add(newWorkoutRecord);
context.SaveChanges();

注意:实际业务中不要明文存储用户密码,建议存储加盐哈希后的密码值,登录时比对哈希结果即可,避免数据库泄露导致用户密码批量被盗。

内容的提问来源于stack exchange,提问作者Tris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:03:29