मैंने अपने पहचान सर्वर प्रोजेक्ट में पहचान लागू की है और मुझे पहले से मौजूद डीबी कॉन्फ़िगरेशन में IdentityUser वर्ग को मैप करने का प्रयास करने में समस्या का सामना करना पड़ रहा है।

मुख्य समस्या यह है कि IdentityUser गुण मेरे कॉन्फ़िगरेशन में दो तालिकाओं में विभाजित हैं (मुख्य रूप से पासवर्ड किसी अन्य तालिका में है)।

मैंने तदनुसार अपनी कक्षाएं बनाने की कोशिश की:

public partial class User : IdentityUser<int>
{
    public override int Id { get => base.Id; set => base.Id = value; }
    public override string Email { get => base.Email; set => base.Email = value; }
    public string Telephone { get; set; }
    public override string NormalizedUserName { get => base.NormalizedUserName; set => base.NormalizedUserName = value; }
    public override string UserName { get => base.UserName; set => base.UserName = value; }
}

public class UserMapping : User
{
    public override string PasswordHash { get => base.PasswordHash; set => base.PasswordHash = value; }
    public override int AccessFailedCount { get => base.AccessFailedCount; set => base.AccessFailedCount = value; }
    public override bool EmailConfirmed { get => base.EmailConfirmed; set => base.EmailConfirmed = value; }
}

मैंने हर उस कॉन्फ़िगरेशन की कोशिश की, जिसके बारे में मैं सोच सकता था, लेकिन IdentityUser प्रॉपर्टी जैसे पासवर्डहैश प्रॉपर्टी को दूसरी टेबल पर मैप करने का प्रबंधन नहीं कर सका।

मेरा डीबी संदर्भ, अभी के लिए, इस प्रकार है:

modelBuilder.Entity<UserMapping>(entity =>
{
    entity.ToTable("myOtherTable");

    entity.Property(e => e.Id).HasColumnName("UserId");
    entity.Property(e => e.PasswordHash).HasColumnName("Password");
    entity.Property(e => e.AccessFailedCount).HasColumnName("PasswordFailuresSinceLastSuccess");
    entity.Property(e => e.EmailConfirmed).HasColumnName("IsConfirmed");

    entity.HasOne<User>()
        .WithOne()
        .HasForeignKey<User>(e => e.Id);
});

modelBuilder.Entity<User>(entity =>
{
    entity.ToTable("User");

    entity.Property(e => e.Id).HasColumnName("IdUser");
    entity.Property(e => e.UserName).HasColumnName("Username");
    entity.Property(e => e.NormalizedUserName).HasColumnName("UpperUsername");

    entity.HasKey(e => e.Id)
        .HasName("PK_dbo.User");
});

एफई कोर के साथ पूछताछ करते समय, जिन गुणों को मैंने UserMapping कक्षा में ओवरराइड करने का प्रयास किया था, वे AccessFailedCount को छोड़कर User वर्ग से जुड़े हुए हैं (मुझे कोई सुराग क्यों नहीं है)

SELECT [User].[IdUser], 
       [User].[Email], 
       [User].[IsConfirmed], 
       [User].[UpperUsername], 
       [User].[Password], 
       [User].[Telephone], 
       [User].[Username], 
       [UserMapping].[PasswordFailuresSinceLastSuccess], 
       [UserMapping].[ConfirmationToken], 
       [UserMapping].[CreateDate], 
       [UserMapping].[LastPasswordFailureDate], 
       [UserMapping].[PasswordChangedDate], 
       [UserMapping].[PasswordSalt], 
       [UserMapping].[PasswordVerificationToken], 
       [UserMapping].[PasswordVerificationTokenExpirationDate], 
FROM [User] AS [User]
LEFT JOIN [myOtherTable] AS [UserMapping] ON [User].[IdUser] = [UserMapping].[IdUser]
WHERE [User].[Email] = @__email_0
ORDER BY [User].[IdUser]

क्या इसे मैप करने का कोई तरीका है?

आशा है कि मैं काफी स्पष्ट था, आपकी मदद के लिए धन्यवाद!

1
belyarv 30 नवम्बर 2020, 13:21

1 उत्तर

सबसे बढ़िया उत्तर

तो मैं वास्तव में इसे करने में कामयाब रहा!

चाल उन गुणों को अनदेखा करना था जिन्हें मैं हाथ से पहले बेस क्लास से ओवरराइड करना चाहता था, जैसे:

modelBuilder.Entity<User>().Ignore(c => c.AccessFailedCount)
                           .Ignore(c => c.PasswordHash)
                           .Ignore(c => c.EmailConfirmed)
0
belyarv 30 नवम्बर 2020, 13:52