क्या डेटाबेस प्रथम और ईडीएमएक्स के साथ नई Asp.net पहचान का उपयोग करना संभव है? या केवल पहले कोड के साथ?
यहाँ मैंने क्या किया है:
1) मैंने एक नया MVC5 प्रोजेक्ट बनाया और नई आइडेंटिटी को अपने डेटाबेस में नए यूजर और रोल्स टेबल बनाए।
2) मैंने तब अपना डेटाबेस फर्स्ट ईडीएमएक्स फ़ाइल खोला और नई आइडेंटिटी यूज़र टेबल में घसीटा क्योंकि मेरे पास अन्य टेबल हैं जो इससे संबंधित हैं।
3) EDMX को बचाने पर, डेटाबेस फर्स्ट POCO जनरेटर ऑटो एक यूजर क्लास बनाएगा। हालाँकि, UserManager और RoleManager को नई पहचान नामस्थान (Microsoft.AspNet.Identity.IUser) से विरासत में मिला उपयोगकर्ता वर्ग की उम्मीद है, इसलिए POCO उपयोगकर्ता वर्ग का उपयोग करने से काम नहीं चलेगा।
मुझे लगता है कि मेरे उपयोगकर्ता वर्ग को IUser से विरासत में लेने के लिए मेरे POCO जेनरेशन क्लासेस को संपादित करना एक संभावित समाधान है?
या ASP.NET पहचान केवल कोड प्रथम डिजाइन के साथ संगत है?
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
अपडेट: एंडर्स एबेल के सुझाव के बाद, यह वही है जो मैंने किया था। यह काम करता है, लेकिन मैं सोच रहा हूं कि क्या अधिक सुरुचिपूर्ण समाधान है।
1) मैंने अपनी ऑटो जनरेट की गई संस्थाओं के समान नामस्थान के भीतर एक आंशिक वर्ग बनाकर अपनी इकाई उपयोगकर्ता वर्ग का विस्तार किया।
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) मैंने DBContext के बजाय IdentityDBContext से विरासत में अपना DataContext बदल दिया। ध्यान दें कि हर बार जब आप अपना EDMX अपडेट करते हैं और DBContext और Entity क्लासेस को पुन: उत्पन्न करते हैं, तो आपको इसे इस पर वापस सेट करना होगा।
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) आपके ऑटो जनरेट किए गए उपयोगकर्ता इकाई वर्ग के भीतर, आपको ओवरराइड कीवर्ड को निम्न 4 फ़ील्ड में जोड़ना होगा या इन फ़ील्ड्स पर टिप्पणी करनी होगी क्योंकि वे IdentityUser (चरण 1) से विरासत में मिले हैं। ध्यान दें कि हर बार जब आप अपना EDMX अपडेट करते हैं और DBContext और Entity क्लासेस को पुन: उत्पन्न करते हैं, तो आपको इसे इस पर वापस सेट करना होगा।
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }