2017-08-23 6 views
9

मैं नेट कोर 2.0 में अपडेट समाप्त करने की कोशिश कर रहा हूँ, लेकिन त्रुटियों की एक जोड़ी पॉप अप:ASP.NET कोर में IdentityUser और IdentityRole से विरासत नहीं कर सकते 2.0

समस्या:

मेरे पास दो वर्ग हैं, एप्लिकेशनरोल और एप्लिकेशन यूज़र जो पहचान पत्र और पहचान उपयोगकर्ता से कुछ गुणों का उत्तराधिकारी हैं।

कोर 2.0 के अपडेट के साथ मुझे निम्न त्रुटियां मिल रही हैं, दावा करते हुए कि IdentityRole और IdentityUser नहीं मिला।

संदेश 1:

प्रकार या नाम स्थान का नाम 'IdentityRole

हालांकि, पैकेज Microsoft.AspNetCore.Identity.EntityFrameworkCore 2.0 नेट कोर के नए संस्करण

IdentityRole बारे में स्थापित किया गया है 'नहीं मिला (क्या यह एक प्रयोग निर्देश या असेंबली संदर्भ गायब है?)

संदेश 2:

'Application.Models.ApplicationRole' प्रकार सामान्य प्रकार या विधि में 'TRole' प्रकार का एक पैरामीटर के रूप में नहीं किया जा सकता 'IdentityDbContext'। 'Application.Models.AplicationRole' से 'Microsoft.AspNetCore.Identity.IdentityRole' तक कोई अंतर्निहित संदर्भ रूपांतरण नहीं है। ApplicationRole की

परिभाषा:

public class ApplicationRole:IdentityRole 
{ 
    public string Description { get; set; } 
    public DateTime CreatedDated { get; set; } 
    public string IPAddress { get; set; } 
} 

IdentityUser के बारे में:

संदेश 1:

प्रकार या नाम स्थान का नाम 'IdentityUser' नहीं किया जा सका मिला (है यह एक का उपयोग कर के निर्देश या एक विधानसभा संदर्भ लापता)

संदेश 2:?

'Application.Models.ApplicationUser' प्रकार प्रकार का एक पैरामीटर 'TUser' में के रूप में इस्तेमाल नहीं किया जा सकता जेनेरिक प्रकार या विधि 'पहचान डीबी कॉन्टेक्स्ट'। 'Application.Models.AplicationUser' से 'Microsoft.AspNetCore.Identity.IdentityUser' तक कोई अंतर्निहित संदर्भ रूपांतरण नहीं है।ApplicationUser

public class ApplicationUser:IdentityUser 
{ 
    public string Name { get; set; } 
} 

की

परिभाषा गाइड इस वर्गों को परिभाषित करने के लिए पीछा किया और उनके उपयोग यहां हैं:

http://www.c-sharpcorner.com/article/asp-net-core-mvc-authentication-and-role-based-authorization-with-asp-net-core/

कोर 2.0 में परिवर्तन के साथ

मुझे आश्चर्य है कि कैसे IdentityRole और पहचानकर्ता बदल गया है, इसलिए अब मैं उनसे प्राप्त नहीं कर सकता।

उत्तर

14

हल हो गया।

उन कक्षाओं को रखने वाले पैकेज Microsoft.AspNetCore.Identity.EntityFrameworkCore बदल गए। उन clases (IdentityUser और IdentityRole) तक पहुंचने के लिए एक

using Microsoft.AspNetCore.Identity; 
इस के साथ

जोड़ना होगा, समस्या चला गया है।

+0

तुमने किया था के लिए निम्न नेट कोर 2.0 पर भूमिकाओं का उपयोग कैसे करें? यदि ऐसा है तो कृपया एक उदाहरण दें – YTerle

+0

@YTerle समीक्षा नया उत्तर दें। – tchelidze

4

ICollection<IdentityUserRole<int>> Roles, ICollection<IdentityUserClaim<int>> Claims और ICollection<IdentityUserLogin<int>> Logins नेविगेशन गुण Microsoft.AspNetCore.Identity.IdentityUser से हटा दिए गए हैं।

आप जब एफई कोर माइग्रेशन चल उन्हें मैन्युअल

public class MyUser : IdentityUser 
{     
    public virtual ICollection<IdentityUserRole<int>> Roles { get; } = new List<IdentityUserRole<int>>(); 

    public virtual ICollection<IdentityUserClaim<int>> Claims { get; } = new List<IdentityUserClaim<int>>(); 

    public virtual ICollection<IdentityUserLogin<int>> Logins { get; } = new List<IdentityUserLogin<int>>(); 
} 

डुप्लिकेट विदेशी कुंजी को रोकने के लिए परिभाषित करना चाहिए, जोड़ने के अपने IdentityDbContext वर्ग 'OnModelCreating विधि

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    base.OnModelCreating(builder); 

builder.Entity<MyUser>() 
    .HasMany(e => e.Claims) 
    .WithOne() 
    .HasForeignKey(e => e.UserId) 
    .IsRequired() 
    .OnDelete(DeleteBehavior.Cascade); 

builder.Entity<MyUser>() 
    .HasMany(e => e.Logins) 
    .WithOne() 
    .HasForeignKey(e => e.UserId) 
    .IsRequired() 
    .OnDelete(DeleteBehavior.Cascade); 

builder.Entity<MyUser>() 
    .HasMany(e => e.Roles) 
    .WithOne() 
    .HasForeignKey(e => e.UserId) 
    .IsRequired() 
    .OnDelete(DeleteBehavior.Cascade); 
} 

Migrating Authentication and Identity to ASP.NET Core 2.0

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