ASP.NET पहचान EF डेटाबेस के साथ पहले MVC5


88

क्या डेटाबेस प्रथम और ईडीएमएक्स के साथ नई 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; }

1
क्या आपके पास अपने कार्यान्वयन का नमूना कोड है? जब मैं उपरोक्त को दोहराने की कोशिश करता हूं, तो मुझे एक त्रुटि मिलती है जब मैं एक उपयोगकर्ता को लॉगिन करने या पंजीकृत करने का प्रयास करता हूं। "इकाई प्रकार AspNetUser वर्तमान संदर्भ के लिए मॉडल का हिस्सा नहीं है" जहां AspNetUser मेरी उपयोगकर्ता इकाई है
टिम

क्या आपने अपने EDMX में AspNetUser टेबल को जोड़ा है? इसके अलावा, सुनिश्चित करें कि आपका AccountController ApplicationContext के बजाय MVC5Test_DBEntities (या जो भी आपके DB संदर्भ का नाम है) का उपयोग कर रहा है।
पैट्रिक ट्रान

8
ASP.NET आइडेंटिटी ____ की एक स्टीमिंग पाइल है। डेटाबेस-फर्स्ट, नो डॉक्यूमेंटेशन, खराब रेफरेन्शियल कंस्ट्रक्ट्स (SQL सर्वर पर CASCADE DELETE से गायब) के लिए भयानक सपोर्ट और आईडी (परफॉरमेंस इश्यू और इंडेक्स विखंडन) के लिए स्ट्रिंग्स का उपयोग करता है। और पहचान के ढांचे पर यह उनका 297 वां प्रयास है ...
दीपस्पेस १०

1
@ डीपस्पेस 101 पहचान कोड-प्रथम के समान ही डीबी-प्रथम का समर्थन करता है। टेम्प्लेट कोड-प्रथम करने के लिए सेटअप हैं इसलिए यदि आप किसी टेम्पलेट से शुरू करते हैं तो आपको कुछ चीजों को बदलना होगा। कैस्केड डिलीट ठीक काम करता है, आप स्ट्रिंग्स को आसानी से बदल सकते हैं। नीचे मेरा जवाब देखें।
जूता

1
@ सो मुझे कहना होगा कि मुझे लगता है कि आप गलत हो सकते हैं। मुझे अभी तक db-first (कोई दस्तावेज़ीकरण) में इसे लागू करने के तरीके पर एक व्यापक, विस्तृत उदाहरण / ट्यूटोरियल नहीं मिला है। एपीआई संपत्ति IdentityUser.Roles के माध्यम से जंक्शन टेबल "IdentityUserRoles" को संदर्भित करने की कोशिश करता है, जो ईएफ डीबी-प्रथम पर संबंध तोड़ता है क्योंकि जंक्शन टेबल को संस्थाओं (खराब संदर्भात्मक बाधाओं-ईश) के रूप में उजागर नहीं किया जाता है। मैं आईडी के लिए तार के बारे में असहमत हूं क्योंकि यह विरासत में मिली कक्षाओं में प्रकार के मापदंडों को निर्दिष्ट करके अनुकूलित किया जा सकता है। यह योग करने के लिए, मुझे लगता है जैसे कि वे डीबी को ध्यान में नहीं रखते थे।
लोप्सर्ड

जवाबों:


16

POCO और Database First के साथ पहचान प्रणाली का उपयोग करना संभव होना चाहिए, लेकिन आपको कुछ ट्विक्‍स बनाने होंगे:

  1. इकाई वर्ग बनाने के लिए POCO पीढ़ी के लिए .tt-फ़ाइल को अपडेट करें partial। इससे आपके लिए एक अलग फ़ाइल में अतिरिक्त कार्यान्वयन की आपूर्ति करना संभव होगा।
  2. Userकिसी अन्य फ़ाइल में वर्ग का आंशिक कार्यान्वयन करें

 

partial User : IUser
{
}

यह Userवास्तविक जेनरेट की गई फ़ाइलों को छूने के बिना क्लास को सही इंटरफ़ेस लागू करने में मदद करेगा (उत्पन्न फ़ाइलों को हमेशा एक बुरा विचार है)।


धन्यवाद। अगर यह काम करता है तो मुझे यह एक कोशिश और रिपोर्ट देनी होगी।
पैट्रिक ट्रान

मैंने कोशिश की कि आपने क्या उल्लेख किया है। अद्यतन जानकारी के लिए मेरी पोस्ट देखें ... लेकिन समाधान बहुत सुंदर नहीं था: /
पैट्रिक ट्रान

मैं सिर्फ एक ही समस्या रहा है। ऐसा लगता है कि DB-पहली पर प्रलेखन बहुत विरल है। यह एक अच्छा सुझाव है, लेकिन मुझे लगता है कि आप सही हैं, यह काफी काम नहीं करता है
फिल

4
क्या कोई उपाय है जो अभी तक हैक नहीं हुआ है?
user20358

मैं प्याज वास्तुकला का उपयोग कर रहा हूं और सभी POCO कोर में हैं। वहां IUser का उपयोग करने की अनुशंसा नहीं की जाती है। तो किसी भी समाधान?
उस्मान खालिद

13

मेरे कदम बहुत समान हैं लेकिन मैं साझा करना चाहता था।

1) एक नया MVC5 प्रोजेक्ट बनाएं

2) एक नया Model.edmx बनाएं। भले ही यह एक नया डेटाबेस है और कोई तालिका नहीं है।

3) web.config संपादित करें और इस उत्पन्न कनेक्शन को प्रतिस्थापित करें:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-SSFInventory-20140521115734.mdf;Initial Catalog=aspnet-SSFInventory-20140521115734;Integrated Security=True" providerName="System.Data.SqlClient" />

इस कनेक्शन के साथ:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;database=SSFInventory;integrated security=true;" providerName="System.Data.SqlClient" />

बाद में, एप्लिकेशन बनाएं और चलाएं। एक उपयोगकर्ता पंजीकृत करें और फिर टेबल बनाए जाएंगे।


1
इससे एक समस्या हल हो गई, मैं डेटाबेस में एप्लिकेशन उपयोगकर्ता को नहीं देख सका, लेकिन डिफ़ॉल्ट कनेक्शन को बदलने के बाद, इसने काम किया।
हसन चौ।

10

संपादित करें: M.NET5 कोडप्लेक्स प्रोजेक्ट टेम्प्लेट के लिए पहले EF डेटाबेस के साथ ASP.NET पहचान।


मैं एक मौजूदा डेटाबेस का उपयोग करना चाहता था और ApplicationUser के साथ संबंध बनाना चाहता था। यह है कि मैंने इसे SQL सर्वर का उपयोग कैसे किया, लेकिन एक ही विचार शायद किसी भी डीबी के साथ काम करेगा।

  1. MVC प्रोजेक्ट बनाएँ
  2. Web.config में DefaultConnection के तहत सूचीबद्ध DB खोलें। इसे कहा जाएगा (एस्पनेट- [टाइमस्टैम्प] या ऐसा ही कुछ।)
  3. डेटाबेस तालिका स्क्रिप्ट।
  4. SQL सर्वर प्रबंधन स्टूडियो में मौजूदा डेटाबेस में स्क्रिप्टेड टेबल डालें।
  5. ApplicationUser में संबंधों को अनुकूलित और जोड़ें (यदि आवश्यक हो) के ।
  6. नया वेब प्रोजेक्ट बनाएं> MVC> DB पहला प्रोजेक्ट> EF के साथ DB आयात करें ... आपके द्वारा सम्मिलित पहचान वर्गों को छोड़कर।
  7. में IdentityModels.cs ApplicationDbContext बदलने :base("DefaltConnection")अपने प्रोजेक्ट की DbContext उपयोग करने के लिए।

संपादित करें: Asp.Net पहचान वर्ग आरेख यहाँ छवि विवरण दर्ज करें


6
यह मुद्दा DBContext नहीं है, लेकिन UserManager और RoleManager को Microsoft से आने वाले वर्ग की अपेक्षा है। जो Microsoft.AspNet.Identity.EntityFramework.IdentityUser
Patrick Tran

सार्वजनिक वर्ग IdentityDbContext <TUser>: DbContext जहां TUser: Microsoft.AspNet.Identity.EntityFramework.IdentityUser। पहले डेटाबेस का उपयोग करते समय, उत्पन्न इकाई वर्ग किसी भी आधार वर्गों से विरासत में नहीं मिलता है।
पैट्रिक ट्रान

जब आप इकाई ढांचे के साथ कक्षाएं उत्पन्न करते हैं तो बस उन्हें डेटाबेस से बाहर कर दें।
बदबू

यदि आप पहचान तालिका को ईडीएमएक्स से बाहर करते हैं, तो आप अन्य वर्गों में नेविगेशन गुण खो देंगे जिनके पास आपके उपयोगकर्ता नाम के लिए विदेशी कुंजी है
पैट्रिक ट्रान

34
मैं पहले कोड को स्थानांतरित करने के लिए अनिच्छुक नहीं हूं ... यह सिर्फ कुछ परिदृश्यों और कंपनियों में है, डीबी व्यवस्थापक आधार तालिकाओं को बनाता है, कोडर को नहीं।
पैट्रिक ट्रान

8

IdentityUserयहां बेकार है क्योंकि यह UserStoreप्रमाणीकरण के लिए उपयोग की जाने वाली कोड-पहली वस्तु है । अपनी खुद की Userवस्तु को परिभाषित करने के बाद , मैंने एक आंशिक वर्ग लागू किया IUserजो कि कक्षा द्वारा उपयोग किया जाता है UserManager। मैं अपने चाहता था Idहोना करने के लिए रों intस्ट्रिंग के बजाय तो मैं बस UserID के toString वापसी ()। इसी तरह मैं चाहता था nमें Usernameuncapitalized किया जाना है।

public partial class User : IUser
{

    public string Id
    {
        get { return this.UserID.ToString(); }
    }

    public string UserName
    {
        get
        {
            return this.Username;
        }
        set
        {
            this.Username = value;
        }
    }
}

आपको किसी भी तरह की जरूरत नहीं है IUser। यह केवल एक इंटरफेस है जिसका उपयोग किया जाता है UserManager। इसलिए यदि आप एक अलग "IUser" को परिभाषित करना चाहते हैं, तो आपको अपने स्वयं के कार्यान्वयन का उपयोग करने के लिए इस वर्ग को फिर से लिखना होगा।

public class UserManager<TUser> : IDisposable where TUser: IUser

अब आप अपने खुद के बारे में UserStoreहै जो उपयोगकर्ताओं, का दावा है, भूमिकाओं, आदि के भंडारण के सभी संभालती है सब कुछ के इंटरफेस को लागू करें कि कोड-पहले UserStoreकरता है और परिवर्तन where TUser : IdentityUserकरने के लिए where TUser : Userजहां "उपयोगकर्ता" अपने इकाई वस्तु है

public class MyUserStore<TUser> : IUserLoginStore<TUser>, IUserClaimStore<TUser>, IUserRoleStore<TUser>, IUserPasswordStore<TUser>, IUserSecurityStampStore<TUser>, IUserStore<TUser>, IDisposable where TUser : User
{
    private readonly MyAppEntities _context;
    public MyUserStore(MyAppEntities dbContext)
    { 
        _context = dbContext; 
    }

    //Interface definitions
}

इंटरफ़ेस कार्यान्वयन में से कुछ पर यहां कुछ उदाहरण दिए गए हैं

async Task IUserStore<TUser>.CreateAsync(TUser user)
{
    user.CreatedDate = DateTime.Now;
    _context.Users.Add(user);
    await _context.SaveChangesAsync();
}

async Task IUserStore<TUser>.DeleteAsync(TUser user)
{
    _context.Users.Remove(user);
    await _context.SaveChangesAsync();
}

MVC 5 टेम्पलेट का उपयोग करते हुए, मैंने AccountControllerइस तरह दिखने के लिए बदलाव किया ।

public AccountController()
        : this(new UserManager<User>(new MyUserStore<User>(new MyAppEntities())))
{
}

अब लॉग इन करके अपने टेबल के साथ काम करना चाहिए।


1
मुझे हाल ही में इसे लागू करने का मौका मिला था, और किसी कारण से (मुझे विश्वास है कि पहचान के 3.0 अपडेट के कारण) मैं IdentityUser को इनहेरिट करके और फिर संपत्तियों को ओवरराइड करके लॉगिन को लागू करने में सक्षम नहीं था; लेकिन एक कस्टम यूजरस्टोर लिखना और विरासत में मिले IUser ने ठीक काम किया; बस एक अद्यतन दे रहा है, शायद किसी को यह उपयोगी लगता है।
नाज एंकिन

क्या आप सभी इंटरफ़ेस कार्यान्वयन या पूर्ण परियोजना के लिए लिंक दे सकते हैं?
डेस्पेइल

क्या कोई विशिष्ट कारण है कि आपने यहां आंशिक वर्ग का उपयोग किया है?
user8964654

यदि आप अपने मॉडल उत्पन्न करने के लिए एक edmx का उपयोग कर रहे हैं तो आपको एक आंशिक वर्ग का उपयोग करना चाहिए। यदि आप पहली बार कोड कर रहे हैं तो आप इसे छोड़ सकते हैं
जूता

3

GitHub: https://github.com/KriaSoft/AspNet.Identity पर इस परियोजना पर एक नज़र डालें

जो भी शामिल:

  • ASP.NET पहचान 2.0 के लिए SQL डेटाबेस प्रोजेक्ट टेम्पलेट
  • इकाई ढांचा डेटाबेस-प्रथम प्रदाता
  • स्रोत कोड और नमूने

यहाँ छवि विवरण दर्ज करें

यह भी देखें : ADO.NET आइडेंटिटी के लिए डेटाबेस-फर्स्ट प्रोवाइडर कैसे बनाएं


3

अच्छा प्रश्न।

मैं एक डेटाबेस-प्रथम व्यक्ति से अधिक हूं। कोड पहले प्रतिमान मेरे लिए ढीले-ढाले लगते हैं, और "माइग्रेशन" भी त्रुटि प्रवण लगते हैं।

मैं एस्पनेट पहचान स्कीमा को अनुकूलित करना चाहता था, और माइग्रेशन से परेशान नहीं होना चाहिए। मैं विजुअल स्टूडियो डेटाबेस प्रोजेक्ट्स (sqlpackage, data-dude) से अच्छी तरह वाकिफ हूं और स्कीमा को अपग्रेड करने में यह बहुत अच्छा काम करता है।

मेरा सरलीकृत समाधान है:

1) एक डेटाबेस प्रोजेक्ट बनाएं जो Aspnet आइडेंटिटी स्कीमा 2 को मिरर करता है) इस प्रोजेक्ट (.dacpac) के आउटपुट का उपयोग प्रोजेक्ट संसाधन 3 के रूप में करता है) जरूरत पड़ने पर .dacpac को तैनात करता है।

MVC5 के लिए, ApplicationDbContextवर्ग को संशोधित करने के लिए यह जा रहा लगता है ...

1) लागू करें IDatabaseInitializer

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IDatabaseInitializer<ApplicationDbContext> { ... }

2) कंस्ट्रक्टर में, संकेत दें कि यह वर्ग डेटाबेस इनिशियलाइज़ेशन को लागू करेगा:

Database.SetInitializer<ApplicationDbContext>(this);

3) लागू करें InitializeDatabase:

यहाँ, मैंने DacFX का उपयोग करने और अपने .dacpac को तैनात करने के लिए चुना

    void IDatabaseInitializer<ApplicationDbContext>.InitializeDatabase(ApplicationDbContext context)
    {
        using (var ms = new MemoryStream(Resources.Binaries.MainSchema))
        {
            using (var package = DacPackage.Load(ms, DacSchemaModelStorageType.Memory))
            {
                DacServices services = new DacServices(Database.Connection.ConnectionString);
                var options = new DacDeployOptions
                {
                    VerifyDeployment = true,
                    BackupDatabaseBeforeChanges = true,
                    BlockOnPossibleDataLoss = false,
                    CreateNewDatabase = false,
                    DropIndexesNotInSource = true,
                    IgnoreComments = true,

                };
                services.Deploy(package, Database.Connection.Database, true, options);
            }
        }
    }

2

मैंने इसके माध्यम से काम करते हुए कई घंटे बिताए और अंत में एक समाधान मिला, जिसे मैंने अपने ब्लॉग पर यहां साझा किया है । मूल रूप से, आपको बदबू में कहा गया सब कुछ करने की आवश्यकता है के उत्तर लेकिन एक अतिरिक्त चीज़ के साथ: पहचान फ्रेमवर्क सुनिश्चित करना आपके एप्लिकेशन संस्थाओं के लिए उपयोग किए गए एंटिटी फ्रेमवर्क कनेक्शन स्ट्रिंग के शीर्ष पर एक विशिष्ट एसक्यूएल-क्लाइंट कनेक्शन स्ट्रिंग है।

संक्षेप में, आपका एप्लिकेशन पहचान फ्रेमवर्क के लिए एक कनेक्शन स्ट्रिंग और आपके एप्लिकेशन संस्थाओं के लिए अन्य का उपयोग करेगा। प्रत्येक कनेक्शन स्ट्रिंग एक अलग प्रकार की है। एक पूर्ण ट्यूटोरियल के लिए मेरे ब्लॉग पोस्ट को पढ़ें।


मैंने आपके ब्लॉग में दो बार आपके द्वारा बताई गई सभी चीजों की कोशिश की, यह मेरे लिए कारगर नहीं हुई।
बधोन जैन

@ बाधोन मुझे बहुत खेद है कि मेरे ब्लॉग पोस्ट के निर्देशों ने आपके लिए काम नहीं किया। मेरे पास अनगिनत लोग अपना धन्यवाद व्यक्त करते हैं क्योंकि उन्हें मेरे लेख के बाद सफलता मिली है। हमेशा याद रखें कि यदि Microsoft कुछ अपडेट करता है तो यह परिणाम को प्रभावित कर सकता है। मैंने ASP.NET MVC 5 के लिए पहचान फ्रेमवर्क 2.0 के साथ लेख लिखा। इससे आगे की कोई भी समस्या हो सकती है, लेकिन अभी तक मुझे बहुत हालिया टिप्पणियां मिली हैं जो सफलता का संकेत देती हैं। मैं आपकी समस्या के बारे में अधिक सुनना पसंद करूंगा।
डैनियल ईगल

मैं एक बार फिर से अनुसरण करने की कोशिश करूंगा, जिस समस्या का मुझे सामना करना पड़ा वह यह है कि मैं अपने कस्टम डेटाबेस का उपयोग नहीं कर सका, यह ऑटो निर्मित डेटाबेस का उपयोग करता है। वैसे भी, मैं आपके लेख के साथ कुछ गलत कहने का मतलब नहीं था। अपनी जानकारी साझा करने के लिए धन्यवाद।
बधोन जैन

1
@ बाधोन मेरे दोस्त को कोई चिंता नहीं है, मुझे कभी नहीं लगा कि आप कुछ भी कह रहे हैं, यह लेख के साथ गलत था। हम सभी के पास विभिन्न किनारे के मामलों के साथ अद्वितीय स्थितियां हैं, इसलिए कभी-कभी दूसरों के लिए जो काम करता है वह जरूरी नहीं कि हमारे लिए काम करे। मुझे आशा है कि आप अपनी समस्या को हल करने में सक्षम थे।
डैनियल ईगल

2

मैंने पाया कि @ JoshYates1980 का सबसे सरल उत्तर है।

एक श्रृंखला परीक्षणों और त्रुटियों के बाद मैंने जोश का सुझाव दिया और connectionStringमेरी उत्पन्न DB कनेक्शन स्ट्रिंग के साथ प्रतिस्थापित किया । मैं मूल रूप से निम्नलिखित पोस्ट के बारे में उलझन में था:

मौजूदा डेटाबेस में ASP.NET MVC5 पहचान प्रमाणीकरण कैसे जोड़ें

जहाँ @ से स्वीकृत उत्तर ने ApplicationDbContext()कनेक्शन का नाम बदलने के लिए कहा । यह थोड़ा अस्पष्ट है यदि आप इकाई और डेटाबेस / मॉडल के पहले दृष्टिकोण का उपयोग कर रहे हैं जहां डेटाबेस कनेक्शन स्ट्रिंग उत्पन्न होता है और Web.configफ़ाइल में जोड़ा जाता है ।

ApplicationDbContext()कनेक्शन का नाम है मैप किया गया में डिफ़ॉल्ट कनेक्शन के लिए Web.configफ़ाइल। इसलिए, जोश का तरीका सबसे अच्छा काम करता है, लेकिन ApplicationDbContext()अधिक पठनीय बनाने के लिए, मैं आपके डेटाबेस के नाम का नाम बदलकर @Win के रूप में रखने का सुझाव दूंगा, जो मूल रूप से पोस्ट किया गया है, connectionString"DefaultConnection" को बदलने के लिए Web.configऔर टिप्पणी में और / या एंटिटी को हटाने के लिए सुनिश्चित करें उत्पन्न डेटाबेस में शामिल हैं।

कोड उदाहरण:


1

हमारे पास एक इकाई मॉडल डीएलएल परियोजना है जहां हम अपने मॉडल वर्ग को रखते हैं। हम सभी डेटाबेस स्क्रिप्ट के साथ एक डेटाबेस प्रोजेक्ट भी रखते हैं। मेरा दृष्टिकोण इस प्रकार था

1) अपना खुद का प्रोजेक्ट बनाएं जिसमें पहले डेटाबेस का उपयोग करके ईडीएमएक्स हो

2) अपने डीबी में तालिकाओं को लिपिबद्ध करें, मैंने वीएस2013 को लोकल डीबीडी (डेटा कनेक्शंस) से जोड़ा और स्क्रिप्ट को डेटाबेस प्रोजेक्ट में कॉपी किया, किसी भी कस्टम कॉलम को जोड़ा, जैसे जन्मतिथि [डेट] शून्य नहीं

3) डेटाबेस तैनात करें

4) मॉडल (EDMX) प्रोजेक्ट को मॉडल प्रोजेक्ट में जोड़ें

5) किसी भी कस्टम कॉलम को एप्लिकेशन क्लास में जोड़ें

public class ApplicationUser : IdentityUser
{
    public DateTime BirthDate { get; set; }
}

MVC प्रोजेक्ट में खाता नियंत्रक ने निम्नलिखित को जोड़ा:

आइडेंटिटी प्रोवाइडर चाहता है कि उसके लिए SQL कनेक्शन स्ट्रिंग काम करे, डेटाबेस के लिए केवल 1 कनेक्शन स्ट्रिंग रखने के लिए, EF कनेक्शन स्ट्रिंग से प्रोवाइडर स्ट्रिंग निकालें।

public AccountController()
{
   var connection = ConfigurationManager.ConnectionStrings["Entities"];
   var entityConnectionString = new EntityConnectionStringBuilder(connection.ConnectionString);
        UserManager =
            new UserManager<ApplicationUser>(
                new UserStore<ApplicationUser>(
                    new ApplicationDbContext(entityConnectionString.ProviderConnectionString)));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.