使用SimpleMembershipProvider更新自定义用户配置文件字段?

7

我在UserProfile表中添加了一个名为ClassOfYear的自定义字段,我能够像这样在注册时将数据读取到个人资料中:

var confirmationToken = WebSecurity.CreateUserAndAccount(model.UserName,
    model.Password,
    propertyValues: new { ClassOfYear = model.ClassOfYear },
    requireConfirmationToken: true);

然而,现在我想在管理个人资料时进行更新,但似乎找不到相应的方法。我需要自己更新UserProfile表吗?如果不是,那么应该怎样做才合适呢?顺便提一下,我正在使用Dapper作为数据访问层,但我可以通过Dapper直接更新UserProfile表,如果这是我的任务,那就行了。我只是认为WebSecurity类或类似类已经有了一种方式,因为自定义用户资料字段已与CreateUserAndAccount方法集成。谢谢大家!
2个回答

4

SimpleMembershipProvider的代码中除了在创建时处理附加字段外,没有任何处理附加字段的内容。

你可以从ORM自己查询这些值。

你可以使用WebSecurity.GetUserId(User.Identity.Name)获取用户ID,然后使用Dapper查询UserProfile表。


1
太棒了,谢谢!WebSecurity.GetUserId方法消除了我写的许多子查询!非常感谢! - Mike Perrenoud
1
哎呀,我觉得我在这里错了,因为大部分都没有记录,所以我一直在深入研究。经过更多的调查,我现在认为有一种方法可以做到这一点:)请参见:WebSecurity.CreateUserAndAccount(userName,password,new { CustomPropertyName= WhateverValue },false);您可以下载此源文件并查看它接受一个字典并解析每个值并插入数据库。 - Adam Tuliper
但这不会执行“UPDATE”操作,对吧?因为我已经在使用该方法来“INSERT”值了(事实上,您可以在我的问题中看到)。 - Mike Perrenoud
2
哈,是啊。看看几天很少睡觉会发生什么?:)干杯;) - Adam Tuliper
朋友,加油!保重! - Mike Perrenoud

2

如果有人遇到同样的问题,我在与SimpleMembership搏斗很久后找到了一种解决方案,可以填充webpages_Membership和我的自定义用户表。为了澄清,请按照我的代码进行操作:

public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            TUsuario userDTO= new TUSer()
                {
                    Name = model.Name,
                    Login = model.Login,
                    Pass = model.Pass.ToString(CultureInfo.InvariantCulture),
                    Active = true,
                    IdCompany = model.IdCompany,
                    IdUserGroup = model.IdUserGroup,
                };
            try
            {
                WebSecurity.CreateUserAndAccount(model.Login, model.Pass, new { IdUser = new UserDAL().Seq.NextVal(), Name = userDTO.Name, Login = userDTO.Login, Active = userDTO.Active, Pass = userDTO.Pass, IdCompany = userDTO.IdCompany, IdUserGroup = userDTO.IdUserGroup });

                WebSecurity.Login(model.Login, model.Pass);

在经历了对框架的抱怨之后,我终于感受到了一股清新的空气 :)

附注:用户表在global.asax文件中使用WebSecurity.InitializeDatabaseConnection函数进行指定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接