5

मैं ईएफ कोड के साथ पहले खेल रहा हूं और कस्टम सदस्यता प्रदाता को लागू करते समय अब ​​परेशानी में भाग गया।सदस्यता यूज़र और इकाई फ्रेमवर्क कोड पहले

लिए एफई कोड पहले मैं इस तरह मेरे अपने उपयोगकर्ता श्रेणी का निर्माण:

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

मैं भी एफई पहले से ही के लिए अपने कस्टम MembershipProvider के कुछ कार्यों को लागू किया है, लेकिन उनमें से कुछ अब या तो एक पैरामीटर या एक के रूप में MembershipUser की आवश्यकता होती है प्रतिलाभ की मात्रा।

public MembershipUser GetUser(string username, bool userIsOnline) 

मेरी पहली सोचा MembershipUser से मेरे उपयोगकर्ता वर्ग के वारिस के लिए गया था, लेकिन फिर मैं गुण पर नियंत्रण खो देते हैं। क्या वह पहले ईएफ कोड के साथ भी काम करेगा?

एक वैकल्पिक विचार मेरे उपयोगकर्ता वर्ग के लिए एक विधि ToMembershipUser() तैयार करना है। क्या यह एक विकल्प होगा? मुझे क्या विचार करना होगा?

इसे संभालने का सबसे अच्छा तरीका क्या है?

उत्तर

8

आप इस समस्या को हल करने के लिए एडाप्टर पैटर्न का उपयोग कर सकते हैं।

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

आपके कंस्ट्रक्शन मॉडल के आधार पर आधार निर्माता को पारित पैरामीटर को अनुकूलित करें।

+0

यह पूरी तरह से काम करने लगता है, धन्यवाद! – magnattic

+0

मैंने 'सदस्यता यूज़र' से अपना 'कस्टम यूज़र' विरासत में लिया और इकाई फ्रेमवर्क का उपयोग कर डेटाबेस में 'कस्टम यूज़र' को सहेजते समय समस्या उत्पन्न हुई। अगर कोई एसक्यूएल कोड का उपयोग करना चाहता था, तो यहां कस्टम आधिकारिक उपयोगकर्ता के लिए आधिकारिक तरीका है [कैसे करें: कस्टम सदस्यता उपयोगकर्ता लागू करें] (http://msdn.microsoft.com/en-us/library/ms366730.aspx) – twnaing

+1

'[NotMapped] 'डेटा एनोटेशन के साथ' CusomUser' कक्षा को एनोटेट करना न भूलें। अन्यथा आपको 'कस्टम यूज़र' के बारे में त्रुटि मिलेगी जिसमें अनन्य कुंजी नहीं है। – twnaing