2014-04-04 10 views
41

मैंने वर्षों से एएसपीनेट सदस्यता का उपयोग किया है और बस एएसपीनेट पहचान की कोशिश करना शुरू कर रहा हूं। उन्होंने अभी संस्करण 2.0 जारी किया है और जिसे int प्राथमिक कुंजी का समर्थन करना है। मैं अपने कस्टम पहचान कक्षाएं आदेश पूर्णांक प्राथमिक कुंजी समर्थन प्राप्त करने के लिए इस प्रकार के रूप में परिभाषित किया है:int आईडी कॉलम के साथ ASP.net पहचान 2.0 के लिए तालिका नाम कैसे बदलें?

public class User : IdentityUser<int, UserLogin, UserRole, UserClaim> 
{ 
} 

public class UserLogin : IdentityUserLogin<int> 
{ 
} 

public class Role : IdentityRole<int, UserRole> 
{ 
    public string Description { get; set; } // Custom description field on roles 
} 

public class UserRole : IdentityUserRole<int> 
{ 
} 

public class UserClaim : IdentityUserClaim<int> 
{ 
} 

public class MyDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim> 
{ 
    public MyDbContext() : this("MyDB") { } 

    public MyDbContext(string connStringName) : base(connStringName) 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
     this.Configuration.ProxyCreationEnabled = false; 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<User>().ToTable("Users"); 
     modelBuilder.Entity<Role>().ToTable("Roles"); 
     modelBuilder.Entity<UserRole>().ToTable("UserRoles"); 
     modelBuilder.Entity<UserLogin>().ToTable("UserLogins"); 
     modelBuilder.Entity<UserClaim>().ToTable("UserClaims"); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

जब मैं एक डेटाबेस प्रवास बनाते हैं, तो यह ठीक से पहचान टेबल से प्रत्येक के लिए एक पूर्णांक आईडी स्तंभ बनाता है, तथापि, यह OnModelCreating विधि में निर्दिष्ट मेरे कस्टम टेबल नामों को अनदेखा कर रहा है। इसके बजाय मुझे dbo.AspNetUsers और dbo.AspNetRoles जैसे तालिका नाम मिलते हैं।

मैंने अपनी कस्टम पहचान कक्षाओं में [Table("TableName")] जोड़ने का भी प्रयास किया है और इसका कोई प्रभाव नहीं है।

ASP.net पहचान 1.0 के लिए उदाहरण को देख में, यह देखा जैसे वे modelBuilder.Entry<Type>().ToTable("TableName") पंक्तियों में से प्रत्येक दोहराया आधार पहचान वर्गों का उपयोग करना:

modelBuilder.Entity<User>().ToTable("Users"); 
modelBuilder.Entity<IdentityUser<int, IdentityUserLogin<int>, IdentityUserRole<int>, IdentityUserClaim<int>>>().ToTable("Users"); 

modelBuilder.Entity<Role>().ToTable("Roles"); 
modelBuilder.Entity<IdentityRole<int, UserRole>>().ToTable("Roles"); 

modelBuilder.Entity<UserRole>().ToTable("UserRoles"); 
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles"); 

modelBuilder.Entity<UserLogin>().ToTable("UserLogins"); 
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins"); 

modelBuilder.Entity<UserClaim>().ToTable("UserClaims"); 
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims"); 

हालांकि, मैं कई रूप की कोशिश की और मेरी माइग्रेशन उत्पन्न नहीं होता । मैंने जैसी त्रुटियों को प्राप्त करना जारी रखा है Microsoft.AspNet.Identity.EntityFramework.IdentityUser'4 [System.Int32, Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin'1 [System.Int32], Microsoft.AspNet.Identity.EntityFramework टाइप करें। IdentityUserRole'1 [System.Int32], Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim'1 [System.Int32]] 'मैप नहीं किया गया था। जांचें कि इग्नोर विधि या NotMappedAttribute डेटा एनोटेशन का उपयोग करके इस प्रकार को स्पष्ट रूप से बहिष्कृत नहीं किया गया है। सत्यापित करें कि प्रकार को कक्षा के रूप में परिभाषित किया गया था, आदिम या सामान्य नहीं है, और EntityObject से प्राप्त नहीं होता है।

मैं एएसपीनेट पहचान 2.0 में पूर्णांक प्राथमिक कुंजी के साथ कस्टम तालिका नाम कैसे उत्पन्न कर सकता हूं?

+0

में सूचीबद्ध यदि आप मैं की तलाश में यहां भूमि का क्या नाम दंत 3.0, [इस क्यू/ए देखें] (http://stackoverflow.com/questions/34523066/how-can-i-change-the-table-names-used-by-asp-net-identity-3- vNext)। +1 के आसपास – Terminus

उत्तर

73

Grrr ...... तो इस पर कुछ घंटे बर्बाद करने के बाद, मैंने अपने नियमों की प्रतिलिपि बनाई और उन्हें base.OnModelCreating(modelBuilder); लाइन से नीचे चिपकाया और सब कुछ ठीक से काम किया। मुझे नहीं पता था आधार विधि की जरूरत के नाम से जाना है कि पहली :(

सब कुछ ठीक से काम कर रहा है अब निम्नलिखित विन्यास का उपयोग कर:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); // This needs to go before the other rules! 

    modelBuilder.Entity<User>().ToTable("Users"); 
    modelBuilder.Entity<Role>().ToTable("Roles"); 
    modelBuilder.Entity<UserRole>().ToTable("UserRoles"); 
    modelBuilder.Entity<UserLogin>().ToTable("UserLogins"); 
    modelBuilder.Entity<UserClaim>().ToTable("UserClaims"); 
} 
+0

ब्याज की बात - आधार। ओनमोडेल क्रिएटिंग (मॉडलबिल्डर); मेरे लिए भी काम किया .. :) –

+1

एक पोस्ट के lifesaver, पहले आधार imp कॉल करने की जरूरत पहले अंतर्ज्ञानी नहीं था। यदि पहचान 2.0 का उपयोग करते हैं, तो मॉडल प्रकार पहचान पहचान, पहचान उपयोगकर्ता, पहचान यूसेरोल आदि हैं ... लेकिन वही प्रिंसिपल लागू होता है। –

+0

आपको बहुत बहुत धन्यवाद! आपने आधार कैसे पाया। ऑनमोडेल क्रिएटिंग को पहले फोन करना पड़ा था? –

7

IdentityModel.cs फ़ाइल में, मैं करने के लिए निम्न कोड जोड़ा ApplicationDbContext वर्ग

सूचना मॉडल नाम अलग हैं कि कि स्वीकार किए जाते हैं जवाब

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<ApplicationUser>().ToTable("SystemUsers"); 
     modelBuilder.Entity<IdentityRole>().ToTable("SystemRoles"); 
     modelBuilder.Entity<IdentityUserRole>().ToTable("SystemUserRoles"); 
     modelBuilder.Entity<IdentityUserLogin>().ToTable("SystemUserLogins"); 
     modelBuilder.Entity<IdentityUserClaim>().ToTable("SystemUserClaims"); 
    } 
+0

क्या यह स्थायी बदलना संभव है, निम्न कोड को बदलने वाला ईवेंट यह भी रहना चाहिए – SAR

संबंधित मुद्दे