2012-11-05 32 views
7

Tôi đã thêm một lĩnh vực tùy chỉnh vào bảng UserProfile tên ClassOfYear và tôi có thể nhận được dữ liệu vào hồ sơ cá nhân trong quá trình đăng ký như thế này:Cập nhật các trường hồ sơ người dùng tùy chỉnh bằng SimpleMembershipProvider?

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

Tuy nhiên, bây giờ tôi muốn để có thể cập nhật hồ sơ cá nhân khi Tôi quản lý nó nhưng tôi dường như không thể tìm thấy một phương pháp để làm như vậy. Tôi có cần tự mình cập nhật bảng UserProfile không? Nếu không, cách thích hợp để làm điều này là gì?

FYI, tôi đang sử dụng Dapper làm lớp truy cập dữ liệu của mình, chỉ trong trường hợp nó quan trọng. Nhưng, như đã nói, tôi chỉ có thể cập nhật bảng UserProfile qua Dapper nếu đó là những gì tôi phải làm, tôi chỉ thấy rằng lớp WebSecurity, hoặc một cái gì đó tương tự, đã có một cách vì các trường hồ sơ người dùng tùy chỉnh được tích hợp với CreateUserAndAccount.

Cảm ơn tất cả!

Trả lời

4

Không có gì trong mã SimpleMembershipProvider thực hiện bất kỳ điều gì với các trường bổ sung trừ khi tạo.

Chỉ cần tự truy vấn giá trị từ ORM của bạn.

Bạn có thể sử dụng WebSecurity.GetUserId (User.Identity.Name) để lấy id của người dùng và sau đó là Dapper để truy vấn bảng UserProfile.

+1

Tuyệt vời, cảm ơn! Phương thức 'WebSecurity.GetUserId' vừa loại bỏ TON các truy vấn phụ mà tôi đã viết! Cảm ơn rất nhiều! –

+1

Arg. Tôi nghĩ rằng tôi đã sai ở đây, được lặn sâu hơn vào các chi tiết như hầu hết không có giấy tờ của nó. Sau khi nghiên cứu thêm, tôi nghĩ rằng có một cách để làm điều này ngay bây giờ:) Xem: WebSecurity.CreateUserAndAccount (userName, mật khẩu, mới {CustomPropertyName = WhateverValue}, false); Bạn có thể tải xuống tệp nguồn này và xem nó lấy một từ điển và phân tích từng giá trị và chèn vào cơ sở dữ liệu. –

+0

Nhưng điều đó sẽ không thực hiện quyền 'UPDATE'? Bởi vì tôi đang sử dụng phương pháp đó để 'INSERT' các giá trị đã có (như bạn có thể thấy trong câu hỏi của tôi trong thực tế). –

2

Chỉ trong trường hợp bất kỳ ai phải đối mặt với cùng một vấn đề. Sau khi chiến đấu rất nhiều với SimpleMembership tôi đã nhận được một giải pháp để điền vào cả trang webNhận dạng và bảng Người dùng tùy chỉnh của tôi. Để làm rõ theo mã của tôi:

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

Sau nguyền rủa khuôn khổ rất nhiều, mà đã cho tôi một niềm hạnh phúc của không khí trong lành :)

PS .: Bảng người dùng được xác định trong tập tin global.asax sử dụng WebSecurity.InitializeDatabaseConnection functon.

Các vấn đề liên quan