如何避免ASP.NET Identity添加此额外字段?

时间:2014-10-09 07:44:20

标签: ef-code-first asp.net-identity

我有一个新的MVC5项目,包含ASP.NET Identity 2.0和EF 6.1.1。

我添加了自己的ApplicationUser(基于内置的IdentityUser)。这就是我的DbContext的创建方式。

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

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

创建数据库时,我有AspNetUsers,AspNetUserRoles,AspNetUserClaims和AspNetUserLogins等表。然后我用最基本的语句添加了OnModelCreating()。

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
    }

只要我添加OnModelCreating(),身份表就会自动重命名为ApplicationUsers,IdentityUserRoles,IdentityUserClaims和IdentityUserLogins。这对我很好(我知道如何重命名)。

但我不喜欢:突然之间,IdentityUserRoles,IdentityUserClaims和IdentityUserLogins有一个额外的字段,名为&#34; ApplicationUser_Id&#34 ;。原版&#34; AspNetXXX&#34;桌子没有这样的场地。

为什么?为了避免这种情况,我能做些什么吗?

2 个答案:

答案 0 :(得分:2)

您需要致电base.OnModelCreatingOnModelCreatingIdentityDbContext还有许多额外的事情,你可能会在没有调用它的情况下丢失它们 - 表的默认名称就是其中之一。

最好先调用它,然后再应用自己的更改。

答案 1 :(得分:1)

Matt Lassam-Jones

所述

也为我工作,谢谢你。

public class NebulaContext : IdentityDbContext<ApplicationUser>
    {
        public NebulaContext()
            : base("Name=MyEntity", throwIfV1Schema: false)
        {

        }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {         
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //Optional
                modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();//Optional
                modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); //Optional
                base.OnModelCreating(modelBuilder);
    }
}