c# - ASP.NET আইডেন্টিটি ব্যবহার করার সময় আমি কিভাবে টেবিলের নাম পরিবর্তন করতে পারি?




asp.net-identity (4)

আপনি আপনার পছন্দসই টেবিলে মানচিত্রের জন্য আপনার DbContext ক্লাসে এই পদ্ধতিটি ওভাররাইড করার চেষ্টা করতে পারেন:

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<IdentityUser>()
            .ToTable("AspNetUsers");

আমি ভিজ্যুয়াল স্টুডিও ২013 (এমএসডিএন ২013-18-18 থেকে ডাউনলোড করা) এবং অতএব এপননেটের সর্বশেষ সংস্করণটি (RTM) সংস্করণের সংস্করণটি ব্যবহার করছি (RTM, RC নয়)। যখন আমি একটি নতুন ওয়েব প্রকল্প তৈরি করি, আমি প্রমাণীকরণের জন্য "ব্যক্তিগত ব্যবহারকারী অ্যাকাউন্ট" নির্বাচন করি। এটি নিচের টেবিলগুলি তৈরি করে:

  1. AspNetRoles
  2. AspNetUserClaims
  3. AspNetUserLogins
  4. AspNetUserRoles
  5. AspNetUsers

যখন আমি একটি নতুন ব্যবহারকারী নিবন্ধন করি (ডিফল্ট টেমপ্লেট ব্যবহার করে), এই টেবিলগুলি (উপরে তালিকাবদ্ধ) তৈরি করা হয় এবং AspNetUsers টেবিলটিতে একটি রেকর্ড রয়েছে যা রয়েছে:

  1. আইডি
  2. ব্যবহারকারীর নাম
  3. PasswordHash
  4. SecurityStamp
  5. Discriminator

অতিরিক্তভাবে, "অ্যাপ্লিকেশন ইউসার" ক্লাসে জনসাধারণের বৈশিষ্ট্য যোগ করে আমি সফলভাবে "ফার্স্টনাম", "লাস্টনাম", "ফোন নাম্বার" ইত্যাদি হিসাবে অ্যাসপনেট ব্যবহারকারী টেবিলে অতিরিক্ত ক্ষেত্র যুক্ত করেছি।

এখানে আমার প্রশ্ন। উপরে উল্লিখিত তালিকার নামগুলি পরিবর্তন করার একটি উপায় আছে (যখন তারা প্রথম তৈরি হয়) বা উপরে তালিকাভুক্ত হিসাবে তারা সর্বদা AspNet উপসর্গের সাথে নামকরণ করা হবে? টেবিলের নাম পৃথকভাবে নামকরণ করা যেতে পারে, তাহলে ব্যাখ্যা করুন।

-- হালনাগাদ --

আমি @ হাউ কুং এর সমাধানটি বাস্তবায়ন করেছি। এটি একটি নতুন টেবিল তৈরি করে (উদাহরণস্বরূপ আমি এটি MyUsers বলা), কিন্তু এটি এখনও AspNetUsers টেবিল তৈরি করে। লক্ষ্য "MyUsers" টেবিল দিয়ে "AspNetUsers" টেবিল প্রতিস্থাপন করা হয়। নীচের কোড দেখুন এবং তৈরি টেবিল ডাটাবেস ইমেজ।

আমি আসলেই নিজের নামের সাথে প্রতিটি AspNet টেবিল প্রতিস্থাপন করতে চাই ... Fxample, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles এবং MyUsers এর জন্য।

আমি কিভাবে এই কাজ এবং শেষ টেবিল এক সেট সঙ্গে শেষ করবেন?

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string PhonePrimary { get; set; }
    public string PhoneSecondary { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(): base("DefaultConnection")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
    }
}

- উত্তর আপডেট করুন -

হাও কুং এবং পিটার স্টুলিনস্কিকে ধন্যবাদ। এই আমার সমস্যা সমাধান ...

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

        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
        modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
    }

আপনি কনফিগারেশন ক্লাসগুলি তৈরি করতে এবং আপনার প্রতিটি সনাক্তকরণ ক্লাসের প্রতিটি বিবরণ নির্দিষ্ট করতে পারেন, উদাহরণস্বরূপ:

using System.Data.Entity.ModelConfiguration;

public class ApplicationUserConfig : EntityTypeConfiguration<ApplicationUser>
{
    public UserConfig()
    {
        ToTable("Users");
        Property(u => u.LocationName).IsRequired();
    }
}

এবং তারপর OnModelCreating () পদ্ধতিতে এই কনফিগারেশনগুলি অন্তর্ভুক্ত করুন:

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

        modelBuilder.Configurations.Add(new ApplicationUserConfig());
        ...
    }

এটি আপনাকে পরিচয় শ্রেণীর প্রতিটি দিকের উপর সম্পূর্ণ নিয়ন্ত্রণ দেবে।


আমরা এপিএইচটি আইডেন্টিটি ডিফল্ট টেবিলের নাম পরিবর্তন করতে পারি:

    public class ApplicationDbContext : IdentityDbContext
    {    
        public ApplicationDbContext(): base("DefaultConnection")
        {
        }

        protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>().ToTable("user");
            modelBuilder.Entity<ApplicationUser>().ToTable("user");

            modelBuilder.Entity<IdentityRole>().ToTable("role");
            modelBuilder.Entity<IdentityUserRole>().ToTable("userrole");
            modelBuilder.Entity<IdentityUserClaim>().ToTable("userclaim");
            modelBuilder.Entity<IdentityUserLogin>().ToTable("userlogin");
        }
    }

উপরন্তু আমরা প্রতিটি শ্রেণি প্রসারিত করতে পারি এবং 'আইডেন্টিটিউসার', 'আইডেন্টিটিলোল' মতো ক্লাসে কোনও সম্পত্তি যুক্ত করতে পারি ...

    public class ApplicationRole : IdentityRole<string, ApplicationUserRole>
{
    public ApplicationRole() 
    {
        this.Id = Guid.NewGuid().ToString();
    }

    public ApplicationRole(string name)
        : this()
    {
        this.Name = name;
    }

    // Add any custom Role properties/code here
}


// Must be expressed in terms of our custom types:
public class ApplicationDbContext 
    : IdentityDbContext<ApplicationUser, ApplicationRole, 
    string, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    static ApplicationDbContext()
    {
        Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    // Add additional items here as needed
}

সময় বাঁচাতে আমরা সব ক্লাস প্রসারিত করতে অ্যাসপানেট আইডেন্টিটি 2.0 এক্সটেনসিবল প্রজেক্ট টেমপ্লেট ব্যবহার করতে পারি।


নীচে আমার কাজ সমাধান:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

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

        modelBuilder.Entity<ApplicationUser>().ToTable("User");
        modelBuilder.Entity<IdentityRole>().ToTable("Role");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

আরো বিস্তারিত জানার জন্য this দেখুন





asp.net-identity