【问题标题】:Using custom user instead of ASP.NET IdentityUser使用自定义用户而不是 ASP.NET IdentityUser
【发布时间】:2015-09-12 09:06:00
【问题描述】:

我是 ASP.NET 身份的新手,并尝试自定义创建新 MVC 项目时提供的身份。

ASP.NET Identity 自动创建几个表来处理身份验证和授权本身。

我的主要目标只是创建用户表,但其他的。我尝试了以下代码来防止创建这些表:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Ignore<IdentityUserRole>();
        modelBuilder.Ignore<IdentityUserClaim>();
        modelBuilder.Ignore<IdentityRole>();
    }

当我想创建用户时,返回以下错误:

导航属性“角色”不是“ApplicationUser”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的导航属性。

我发现内置身份用户具有以下结构:

IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>

我需要的是创建一个不包含角色、声明等的自定义 IdentityUser。我在运行项目时只需要“用户”表。

有没有可能创建我自己的 IdentityUser 或自定义内置的?或者有什么建议只创建“用户”表并使用它?

非常感谢您的建议。

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework identity


    【解决方案1】:

    这是我为了得到解决方案所做的:

    • 我删除了 base.OnModelCreating
    • 然后我按这个顺序添加了忽略。

      //base.OnModelCreating(modelBuilder);
      modelBuilder.Entity<IdentityUser>().ToTable("User");
      modelBuilder.Entity<IdentityUser>().ToTable("User").Ignore(p => p.Roles);
      modelBuilder.Ignore<IdentityUserRole>();
      modelBuilder.Ignore<IdentityUserLogin>();
      modelBuilder.Ignore<IdentityUserClaim>();
      modelBuilder.Ignore<IdentityRole>();
      

    这样做我得到了最后一个错误,它说:Could not drop object 'dbo.Role' because it is referenced by FOREIGN KEY 约束。

    为此,我更改了迁移 DropTable("dbo.Role") 的迁移。我知道这是 hack,但我没有发现 EF 迁移如何将 droptables 语句移动到正确的顺序。

    理查德

    【讨论】:

    • 嗨,理查德,感谢您的回答。我前段时间通过自定义内置用户表解决了我的问题,但您的方法看起来很合理。我会在我开始下一个项目时尝试一下。
    • 太好了,希望这对您的下一个项目有所帮助
    猜你喜欢
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2017-03-24
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多