正在复制的列IdentityUserRole C#IdentityFramework

时间:2017-08-29 23:11:31

标签: c# asp.net identity

好吧,我的表IdentityUserRole还有两个不需要的列,分别是AppUser_Id和IdentityRole_Id。

我在尝试在角色中注册用户时遇到了麻烦。 我发现,如果我将UserId中的内容复制到AppUser_Id中,那么应用程序就可以完美运行。

通过Fluent API,我可以在这里定义键:

        modelBuilder.Entity<IdentityUserRole>()
                    .HasKey(iur => iur.UserId);
        modelBuilder.Entity<IdentityUserLogin>()
                    .HasKey(iul => iul.UserId);
        modelBuilder.Entity<CourseModel>()
                    .HasKey(c => c.CourseID);
        modelBuilder.Entity<FeedbackModel>()
                    .HasKey(f => f.FeedBackId);

我必须这样做,因为NuGet控制台出现了一些错误,因为IdentityUserRole没有定义密钥,所以我这样做了。

我100%确定那是什么让我感到高兴。

现在,这是我的表IdentityUserRole: enter image description here

2 个答案:

答案 0 :(得分:0)

我怀疑你的IdentityUserRole课程类似于:

class IdentityUserRole
{
   ...
   public AppUser AppUser { get; set; }
   public IdentityRole IdentityRole { get; set; }
}

实体框架自动生成AppUser_Id和IdentityRole_Id外部列,因为您没有为AppUserIdentityRole属性指定外键。

如果您要使用UserIdRoleId列,则需要在IdentityUserRole中为属性添加注释,例如

[ForeignKey("UserId")]
public AppUser AppUser { get; set; }

或在您的上下文中使用流畅的API定义关系。

您还应该为IdentityUserRole类型定义主键(例如IdentityUserRoleId)。

答案 1 :(得分:0)

我只需添加&#39; base.OnModelCreating(modelBuilder); &#39;在覆盖功能结束时&#39; OnModelCreating &#39;。