1

I Created a new MVC 5 project whenever i try to rename the table names as described in this question

Change table names using the new Identity system

It always breaks the foreign key relationships in the Logins, Claims, Roles tables.

I have tried to override the OnModelCreating method but in vein here is my code


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //base.OnModelCreating(modelBuilder);
        if (modelBuilder == null)
        {
            throw new ArgumentNullException("modelBuilder");
        }
        modelBuilder.Entity<App>().HasKey(m => new { m.AppId, m.FacebookId });
        modelBuilder.Entity<IdentityUser>().ToTable("Admins");
        modelBuilder.Entity<IdentityUser>().
            Property(p => p.Id).HasColumnName("AdminId");
        modelBuilder.Entity<Admin>()
            .ToTable("Admins")
            .Property(p => p.Id).HasColumnName("AdminId");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("Logins")
           .HasKey(m => new { m.ProviderKey, m.UserId, m.LoginProvider })
           .Property(m => m.UserId)
           .HasColumnName("AdminId");  
        modelBuilder.Entity<IdentityUserRole>().ToTable("AdminRoles")
            .HasKey(m => new { m.RoleId, m.UserId })
            .Property(m => m.RoleId)
            .HasColumnName("AdminRoleId");
        modelBuilder.Entity<IdentityUserRole>().Property(m => m.UserId)
            .HasColumnName("AdminId");
        //modelBuilder.Entity<IdentityUserRole>().HasRequired(m => m.UserId);
        //modelBuilder.Entity<IdentityUserLogin>().HasRequired(m => m.UserId);
        modelBuilder.Entity<IdentityUserClaim>().ToTable("Claims")
            .HasKey(m=> m.Id)
            .Property(m => m.Id)
            .HasColumnName("ClaimId");
        modelBuilder.Entity<IdentityRole>().ToTable("Roles")
            .HasKey(m => m.Id).Property(m => m.Id).HasColumnName("RoleId");
    }

where the "Admin" Class is my name for the ApplicationUser Default class plus my own implementation of it

public class Admin : IdentityUser
{
    [Required]
    public virtual List<App> Apps { get; set; }
    public bool? IsPremium { get; set; }
    [DataType(DataType.Date)]
    public DateTime? LastPublishDateTime { get; set; }
}

here are my other domain classes

public class App
{
    [Key]
    [Column("AppId", Order = 1)]
    public virtual int AppId { get; set; }
    [Required]
    [Key]
    [Column("FacebookId", Order = 2)]
    public virtual string FacebookId { get; set; }
    [Required]
    public virtual string Secret { get; set; }      
    public virtual List<User> Users { get; set; }
    public virtual List<Post> Posts { get; set; }
    [Required]
    public virtual Admin Admin { get; set; }
}


public class Post
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int PostId { get; set; }
    public virtual string Title { get; set; }
    public virtual string Content { get; set; }
    public virtual string Link { get; set; }
    public virtual string Image { get; set; }
    public virtual bool IsSpecial { get; set; }
    [Required]
    public virtual App App { get; set; }
    [Required]
    public virtual DateTime? PublishDate { get; set; }
}

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int UserId { get; set; }
    [MaxLength(500)]
    public virtual string FacebookId { get; set; }
    [MaxLength(500)]
    public virtual string Token { get; set; }
    [Required]
    public virtual App App { get; set; }
}
Community
  • 1
  • 1
a7madx7
  • 840
  • 1
  • 8
  • 18

0 Answers0