8

Vì vậy, tôi đang tạo một trang web ASP.NET MVC.Tôi lưu trữ các chi tiết người dùng bổ sung bằng ASP.NET MVC và SqlMembershipProvider ở đâu?

Trang có một trang đăng ký người dùng khá phức tạp với nhiều trường. Câu hỏi của tôi là, tôi nên duy trì điều này ở đâu? Các bảng người dùng được tạo bởi công cụ cung cấp thành viên không chứa các cột này và tôi bị nhầm lẫn về những gì thực hành tốt nhất là lưu trữ thông tin bổ sung này về từng người dùng?

Đây có phải là nơi nhà cung cấp hồ sơ đi vào hoạt động không? Họ làm việc như thế nào? Nếu không, làm cách nào khác để bạn tồn tại và lưu trữ các chi tiết người dùng bổ sung không được cung cấp trong các cột chứng khoán của các bảng MembershipProvider?

bất cứ ai có thể chỉ cho tôi một số tài nguyên về cách này được xử lý, làm thế nào để truy cập vào những chi tiết người dùng bổ sung khi tôi cần họ, làm thế nào để tạo một người dùng mới với tất cả các thông tin này vv

Trả lời

3

Đây là nơi cung cấp hồ sơ ASP.NET. Bạn có thể sử dụng nó để lưu trữ bất kỳ thông tin hồ sơ nào bạn muốn về người dùng. Tất cả những gì bạn cần làm là thêm các trường bạn cần trong tệp web.config, MSDN Link on how to configure the profile fields in web.config file. Để tổng hợp bài viết, bạn chỉ cần thêm tên và nhập giá trị bạn muốn lưu vào nút thuộc tính của phần tử tiểu sử. Dưới đây là một ví dụ:

<profile enabled="true"> 
    <properties> 
    <add name="Name" /> 
    <group name="Address"> 
     <add name="Street" /> 
     <add name="City" /> 
     <add name="Zip" type="System.Int32" /> 
    </group> 
    </properties> 
</profile> 

Trong ASP.NET Webforms, Visual Studio automagically tạo ra một lớp hồ sơ gõ mạnh mẽ rằng sẽ tham khảo các thuộc tính cấu hình tùy chỉnh của bạn. Trong MVC, điều này không xảy ra. Để tham khảo thông tin tiểu sử của người dùng, chỉ cần gọi HttpContext.Profile ["PropertyName"]. Một ví dụ:

HttpContext.Profile["Name"] = name; 
HttpContext.Profile.GetProfileGroup("Address")["Zip"] = zip; 

Edit: Như Andy ghi chú khác, bằng cách sử dụng SqlProfileProvider mặc định là không thực sự tốt nếu bạn muốn chạy các truy vấn bằng các tài sản. Anh ấy hoàn toàn đúng, và có lẽ tôi nên lưu ý đến giới hạn này. Giới hạn này tồn tại vì SqlProfileProvider lưu trữ tất cả dữ liệu hồ sơ trong ba cột: PropertyNames và PropertyValuesString/PropertyValuesBinary. Tất cả các khóa được lưu trữ trong trường PropertyNames, giá trị có thể được lưu trữ dưới dạng chuỗi được lưu trữ trong trường PropertyValuesString, v.v. Điều này có nghĩa là rất khó thực hiện truy vấn như "Chọn * từ aspnet_Profile trong đó Độ tuổi> 10".

3

Tôi không thực sự chắc chắn có thực hành tốt nhất và nó thực sự phụ thuộc vào cách bạn muốn sử dụng thông tin.

Trước tiên, bạn phải nhận ra tư cách thành viên và tiểu sử là hai điều riêng biệt. Chức năng Thành viên, Hồ sơ và Vai trò ASP.NET được thiết kế để được sử dụng như một dịch vụ, phục vụ nhiều trang web/ứng dụng.

Nếu bạn nhìn vào giản đồ cho các mối quan hệ này, bạn sẽ nhận thấy rằng người dùng là duy nhất cho hệ thống nhưng người dùng có thể được chia sẻ trên các ứng dụng. Điều đó có nghĩa là thông tin hồ sơ của họ được chia sẻ trên các ứng dụng. Thành viên thực sự là sự kết hợp của người dùng với một ứng dụng và chứa thông tin về mối quan hệ của họ với ứng dụng cụ thể đó (mật khẩu, mật khẩu Q & A, v.v ...).

Bạn có thể sử dụng nhà cung cấp hồ sơ như Ryan được đề xuất, nhưng 1) thông tin đó không dễ dàng truy vấn nếu bạn muốn thu thập số liệu hồ sơ và 2) nó được chia sẻ trên tất cả người tiêu dùng dịch vụ thành viên/hồ sơ. Bạn có thể, tuy nhiên, mở rộng nó để đáp ứng nhu cầu của bạn.

Bạn có thể mở rộng nhà cung cấp thành viên như Gortok được đề xuất và thông tin đó sẽ liên quan đến ứng dụng nhưng bạn cần đảm bảo bạn không phá vỡ người tiêu dùng hiện tại của dịch vụ bằng cách sửa đổi các thủ tục hoặc bảng được lưu trữ hiện tại thay đổi giao diện hoặc ý định của họ.

Tùy chọn khác là bạn có thể coi đó là dịch vụ và tự mình theo dõi thông tin này, tham chiếu đến việc triển khai tiểu sử của riêng bạn bằng id người dùng từ nhà cung cấp asp.net sql.

Có một chuỗi hay (16 phần) trên Membership, Profiles, and Roles tại 4 Guys từ Rolla mà tôi khuyên bạn nên đọc và sau đó, khi bạn đã quen thuộc với tất cả các bộ phận chuyển động, hãy đưa ra quyết định giáo dục về nơi tốt nhất lưu trữ và cách tốt nhất để cấu trúc thông tin hồ sơ bạn đang tìm kiếm để tạo.

2

Tôi biết rằng bài đăng này đã được đăng trong một thời gian dài và ngữ cảnh câu hỏi có thể là mvc2 hoặc cũ hơn.

Hiện tại là mvc3 và tôi nghĩ có thể những người khác đang tìm kiếm câu trả lời cho ngữ cảnh mvc5 có thể quan tâm đến giải pháp này.

Trong một dự án mvc5 tiêu chuẩn mà có tài khoản người dùng cá nhân kích hoạt Bạn sẽ tìm thấy khối mã sau đã sẵn sàng để sử dụng trong {} Dự án /Models/IdentityModel.cs

// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
public class ApplicationUser : IdentityUser 
{ 
} 

Đơn giản chỉ cần thêm vào các thuộc tính nhiều đến thế này lớp và các thuộc tính sẽ được lưu giữ trong cơ sở dữ liệu Ví dụ:

public class ApplicationUser : IdentityUser 
{ 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
     public bool Active { get; set; } 
     public DateTime DateRegistered { get; set; } 
} 
Các vấn đề liên quan