创建新对象时在数据库中保存用户 ID

Posted

技术标签:

【中文标题】创建新对象时在数据库中保存用户 ID【英文标题】:Save userid on database when create new object 【发布时间】:2013-07-08 10:56:44 【问题描述】:

我有一个控制器,在创建操作中我需要用户 ID。

这是控制器。

    public ActionResult Create(MyCreateViewModel model)
    
        if (ModelState.IsValid)
        
            var myobject = new MyObject
            
                Attrib1 = DateTime.Now.Date,
                Attrib2 = model.Etichetta,
                UserId = // I need the user ID...
            ;

            // Save the object on database...                

            return RedirectToAction("Index");
        
        return View(model);
    

我正在使用 MVC 4 的 SimpleMembership 提供的 UserProfile 表。

在 MVC 4 中,在整个应用程序中管理 userID 的最佳实践是什么?

我必须在每个实体类中包含一个用户属性吗?

我应该使用Session[] 变量还是什么?

【问题讨论】:

这个userID是当前登录用户的ID吗? 是的,我需要对当前登录用户的引用。 【参考方案1】:

您可以使用此行从UserProfiles 表中获取userId

var userId = WebSecurity.GetUserId(HttpContext.Current.User.Identity.Name);

您还可以使用此功能获取用户完整的个人资料,包括您可能要填充的任何自定义列。

public static UserProfile GetUserProfile()
        
            using (var db = new UsersContext())
            
                var userId = WebSecurity.GetUserId
                            (HttpContext.Current.User.Identity.Name);
                var user = db.UserProfiles
                             .FirstOrDefault(u => u.UserId == userId);
                if (user == null)
                
                    //couldn't find the profile for some reason
                    return null;
                
                return user;
            
        

【讨论】:

WebSecurity.GetUserId(HttpContext.Current.User.Identity.Name) 有效。如果我想使用该功能,我应该把它放在哪里?我猜不在 UserProfile 模型类中,否则我会将其转换为表上的新属性...对吗? 这是来自SimpleMembershipWebMatrix 的OOTB 函数。我有一个类文件(称为 UserHelpers),其中包含这两个 sn-ps 以便于访问。 我也得到了关于这个答案***.com/questions/14630158/…的另一个解决方案。您可以使用WebSecurity.CurrentUserId 获取ID 或WebSecurity.CurrentUserName 获取名称。 不错!感谢您的快捷方式

以上是关于创建新对象时在数据库中保存用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

Entity Framework 6 - . 创建新对象,保存更改,根据新 id 重新查询对象,返回 null

在 save() 中获取新创建对象的 ID

离开 iPhone 时在 Apple Watch 上记录和保存锻炼?

Rails 中的未知属性 - 创建新对象

Discord money bot 将用户 ID 保存在 json 文件中。当 Not 重新启动时,它会为每个人创建一个新的(但相同的)ID

使用 Cake 2.4.5 保存用户和详细信息行