दिलचस्प पोस्ट
$ (यह) AJAX सफलता के अंदर काम नहीं कर रहा है एंड्रॉइड प्रोजेक्ट में लाइब्रेरी प्रोजेक्ट कैसे जोड़ूं? PhantomJS को HTTPS साइट खोलने में विफल सी ++ में एक्सएमएल उत्पन्न करने का सबसे आसान तरीका क्या है? विराम के बाद पृष्ठभूमि में आईफोन जीपीएस कभी भी शुरू नहीं हुई पायथन के साथ UTF-8 स्ट्रिंग को MySQL लिखना एक संपत्ति ExpandoObject पर मौजूद है या नहीं पता कैसे? हुकोप में नौकरियों को बदलना क्या प्रकार के नाम के बाद कोष्ठक नए के साथ एक अंतर बनाते हैं? JQuery / जावास्क्रिप्ट के साथ JSON डेटा को पार्स करने के लिए कैसे? कैसे एक फोन कॉल प्रोग्राम के लिए? क्लोनिंग के लिए GitHub.com से कनेक्ट करने में असमर्थ IPhone ऐप के लिए फेसबुक एक्सेस टोकन सर्वर-साइड सत्यापन किसी भी एक enum सामान्य बाधा की कमी के लिए एक अच्छा कामकाज पता है? jQuery ने तुल्यकालिक XMLHTTPRequest को पदावनत किया है

प्रथम डेटाबेस के साथ एएसपी। नेट पहचान EF डेटाबेस प्रथम MVC5

क्या डाटाबेस फर्स्ट और एडीएमएक्स के साथ नए एसएसपी पहचान का उपयोग करना संभव है? या केवल पहले कोड के साथ?

यहां मैंने जो किया है:

1) मैंने एक नया MVC5 प्रोजेक्ट बनाया है और नई पहचान को मेरे डेटाबेस में नए उपयोगकर्ता और भूमिकाएं तालिकाओं का निर्माण किया था।

2) तब मैंने अपना डाटाबेस पहली एडीएमएक्स फ़ाइल खोला और नई पहचान उपयोगकर्ता तालिका में खींच लिया क्योंकि मेरे पास अन्य तालिकाओं से संबंधित है।

3) ईडीएमएक्स की बचत करने पर, डाटाबेस प्रथम पीओसीओ जनरेटर एक उपयोगकर्ता वर्ग को स्वत: बनाएगा। हालाँकि, UserManager और RoleManager को उम्मीद है कि एक उपयोगकर्ता वर्ग नए पहचान नामस्थान (माइक्रोसॉफ्ट। एस्पनेट। आईडेंटिटी.आईयूएसर) से प्राप्त करेगा, इसलिए पोको यूजर वर्ग का उपयोग करना काम नहीं करेगा।

मुझे लगता है कि संभावित प्रयोजन क्या है कि मेरी उपयोगकर्ता श्रेणी IUser से उत्तीर्ण करने के लिए मेरी पोको जनरेशन क्लासेस को संपादित करना है?

या एएसपी.नेट पहचान केवल कोड प्रथम डिजाइन के साथ संगत है?

++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

अद्यतन: नीचे एंडर हाबिल का सुझाव नीचे, यह वही है जो मैंने किया था। यह काम है, लेकिन मैं सोच रहा हूँ कि क्या एक और अधिक सुरुचिपूर्ण समाधान है।

1) मैंने अपनी इकाई उपयोगकर्ता वर्ग के रूप में एक ही नाम स्थान के भीतर एक आंशिक वर्ग बनाकर अपनी इकाई उपयोगकर्ता वर्ग बढ़ा दिया है

namespace MVC5.DBFirst.Entity { public partial class AspNetUser : IdentityUser { } } 

2) मैंने अपने डाटाकॉन्टेक्स्ट को डीबीसीटीएक्सटी के बजाए आईडेन्टिटी डीबीसीटीएक्सटेक्स से वारिस करने के लिए बदल दिया। ध्यान दें कि हर बार जब आप अपने एडीएमएक्स को अपडेट करते हैं और डीबीसीटीक्स्ट और एंटिटी क्लास को पुनर्जन्म करते हैं, तो आपको इसे वापस इस पर सेट करना होगा।

  public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext 

3) आपके ऑटो जनरेटेड उपयोगकर्ता इकाई वर्ग के भीतर, आपको ओवरराइड कीवर्ड को निम्नलिखित 4 क्षेत्रों में जोड़ना होगा या इन क्षेत्रों को टिप्पणी से बाहर करना चाहिए क्योंकि वे IdentityUser (चरण 1) से विरासत में हैं। ध्यान दें कि हर बार जब आप अपने एडीएमएक्स को अपडेट करते हैं और डीबीसीटीक्स्ट और एंटिटी क्लास को पुनर्जन्म करते हैं, तो आपको इसे वापस इस पर सेट करना होगा।

  override public string Id { get; set; } override public string UserName { get; set; } override public string PasswordHash { get; set; } override public string SecurityStamp { get; set; } 

वेब के समाधान से एकत्रित समाधान "प्रथम डेटाबेस के साथ एएसपी। नेट पहचान EF डेटाबेस प्रथम MVC5"

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

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

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

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

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" /> 

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

संपादित करें: एएसपी। नेट पहचान ईएफ डाटाबेस के साथ पहले एमवीसी 5 कोडप्लेक्स प्रोजेक्ट टेम्पलेट के लिए।


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

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

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

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

 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 को संभालता है। कोड की पहली 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()))) { } 

अब प्रवेश करने के लिए अपने खुद के टेबल के साथ काम करना चाहिए

इस परियोजना को गिटहब पर देखें : https://github.com/KriaSoft/AspNet.Identity

जो भी शामिल:

  • एसएसपी.NET पहचान 2.0 के लिए एसक्यूएल डाटाबेस प्रोजेक्ट टेम्पलेट
  • इकाई फ़्रेमवर्क डाटाबेस-प्रथम प्रदाता (एस)
  • स्रोत कोड और नमूने

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

यह भी देखें : ADO.NET पहचान के लिए डाटाबेस-प्रथम प्रदाता कैसे बनाएं

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

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

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

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

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

मेरा सरल समाधान है:

1) एएसपीएनटी पहचान स्कीमा को मिरर करने वाला डेटाबेस प्रोजेक्ट बनाएँ 2) इस प्रोजेक्ट (.dacpac) के प्रोजेक्ट संसाधन के रूप में आउटपुट का उपयोग करें 3) जब आवश्यक हो .dacpac को परिनियोजित करें

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

1) IDatabaseInitializer लागू IDatabaseInitializer

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

2) कन्स्ट्रक्टर में, संकेत दें कि यह क्लास डाटाबेस आरंभीकरण को कार्यान्वित करेगा:

Database.SetInitializer<ApplicationDbContext>(this);

3) InitializeDatabase लागू 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); } } } 

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

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

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

3) डेटाबेस को परिनियोजित करें

4) आदर्श प्रोजेक्ट में मॉडल (एडीएमएक्स) प्रोजेक्ट को अपडेट करें

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

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

एमवीसी परियोजना में खाता नियंत्रक ने निम्नलिखित को जोड़ा:

आईटी कनेक्शन स्ट्रिंग से प्रदाता स्ट्रिंग को निकालने के लिए, डेटाबेस के लिए केवल 1 कनेक्शन स्ट्रिंग रखने के लिए पहचान प्रदाता एक एसक्यूएल कनेक्शन स्ट्रिंग चाहता है, काम करने के लिए।

 public AccountController() { var connection = ConfigurationManager.ConnectionStrings["Entities"]; var entityConnectionString = new EntityConnectionStringBuilder(connection.ConnectionString); UserManager = new UserManager<ApplicationUser>( new UserStore<ApplicationUser>( new ApplicationDbContext(entityConnectionString.ProviderConnectionString))); } 

मैंने पाया है कि @ जोशहेट्स 1 9 80 में सबसे सरल उत्तर है

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

मौजूदा डेटाबेस से asp.net MVC5 पहचान प्रमाणन जोड़ने के लिए कैसे करें

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

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

कोड उदाहरण: