5

Tôi đang chơi với EF Code Đầu tiên và hiện gặp sự cố khi triển khai MembershipProvider tùy chỉnh.Mã đăng ký thành viênUser và Entity Framework Đầu tiên

Đối với EF Mã Trước tiên tôi tạo ra lớp người sử dụng riêng của tôi như thế này:

public class User 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 
    [Required] 
    public string UserName { get; set; } 
    [Required] 
    public string Password { get; set; } 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    public bool IsApproved { get; set; } 
    public DateTime? LastLoginDate { get; set; } 
    public DateTime? LastActivityDate { get; set; } 
    [Required] 
    public DateTime CreationDate { get; set; } 
    [Required] 
    public string ApplicationName { get; set; } 
} 

Tôi cũng thực hiện một số chức năng của MembershipProvider tùy chỉnh của tôi cho EF đã có, nhưng một số trong số họ hiện nay yêu cầu MembershipUser như hoặc là một tham số hoặc một giá trị trả lại.

public MembershipUser GetUser(string username, bool userIsOnline) 

Suy nghĩ đầu tiên của tôi là để kế thừa lớp người dùng của tôi từ MembershipUser, nhưng sau đó tôi mất kiểm soát đối với Properties. Thậm chí có thể làm việc với EF Code First không?

Ý tưởng thay thế là tạo phương thức ToMembershipUser() cho lớp người dùng của tôi. Đó có phải là một lựa chọn không? Tôi sẽ phải cân nhắc điều gì?

Cách tốt nhất để xử lý việc này là gì?

Trả lời

8

Bạn có thể sử dụng Mẫu bộ điều hợp để giải quyết vấn đề này.

public class CustomUser : MembershipUser 
{ 
    public CustomUser(string providername, 
        User userAccount) : 
     base(providername, 
         userAccount.UserName, 
         userAccount.Id, 
         userAccount.Email, 
         passwordQuestion, 
         string.Empty, 
         true, 
         false, 
         userAccount.CreationDate, 
         userAccount.LastLoginDate, 
         userAccount.LastActivityDate, 
         new DateTime(), 
         new DateTime()) 
    { 
     UserAccount = userAccount; 
    } 

    public User UserAccount { get; private set; } 
} 

Tùy chỉnh thông số được truyền cho hàm tạo cơ sở tùy thuộc vào mô hình thực thể của bạn.

+0

Điều đó có vẻ hoạt động hoàn hảo, cảm ơn! – magnattic

+0

Tôi thừa hưởng 'CustomUser' từ' MembershipUser' và vấn đề nảy sinh khi lưu 'CustomUser' vào cơ sở dữ liệu bằng Entity Framework. Nếu ai đó sử dụng mã SQL, dưới đây là cách thức chính thức cho Người dùng thành viên tùy chỉnh [Cách thực hiện: Người dùng thành viên tùy chỉnh] (http://msdn.microsoft.com/en-us/library/ms366730.aspx) – twnaing

+1

Đừng quên chú thích lớp 'CusomUser' với chú thích dữ liệu' [NotMapped] '. Nếu không, bạn sẽ gặp lỗi về 'CustomUser' không có khóa duy nhất. – twnaing