2012-11-05 86 views
7

我添加了一個自定義字段名爲ClassOfYearUserProfile表,我可以在註冊過程中得到這樣的數據導入配置文件:使用SimpleMembershipProvider更新自定義用戶配置文件字段?

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

不過,現在我希望能夠以更新的姿態時,我管理它,但我似乎無法找到一種方法來做到這一點。 我需要自己簡單更新UserProfile表嗎?如果不是,這樣做的適當方式是什麼?

僅供參考,我使用Dapper作爲我的數據訪問層,以防萬一。但是,如上所述,我可以通過Dapper更新UserProfile表,如果這是我應該做的事情,我只是認爲WebSecurity類或類似的東西已經有了一種方式,因爲自定義用戶配置文件字段與CreateUserAndAccount方法。

謝謝大家!

回答

4

SimpleMembershipProvider代碼中除了創建之外沒有其他字段執行任何操作。

只需從您的ORM中自行查詢值。

您可以使用WebSecurity.GetUserId(User.Identity.Name)獲取用戶的ID,然後使用Dapper查詢UserProfile表。

+1

太棒了,謝謝! 'WebSecurity.GetUserId'方法剛剛擺脫了我寫的子查詢的TON!非常感謝! –

+1

Arg。我認爲我在這裏是錯誤的,一直深入細節,因爲它大部分都是無證的。我認爲現在有一種方法可以做到這一點:)請參閱:WebSecurity.CreateUserAndAccount(userName, password,new {CustomPropertyName = WhateverValue},false);您可以下載此源文件並查看它需要一個字典並分析每個值並插入到數據庫中。 –

+0

但是,這不會執行一個'更新'的權利?因爲我正在使用該方法來「INSERT」這些值(正如您在我的問題中可以看到的那樣)。 –

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); 

咒罵框架之後很多,這給了我的新鮮空氣:)

PS:一個幸福的用戶表是使用在Global.asax文件中指定WebSecurity.InitializeDatabaseConnection函數。

相關問題