ASP.NET标识 - 将用户ID主键默认类型从字符串更改为int时和使用自定义表名时出错

 康博洋2602899791 发布于 2023-01-19 10:26

我正在使用Microsoft.AspNet.Identity 2.0.0-beta1和Entity Framework 6.1.0-beta1(2014年2月11日发布).

我收到以下错误,当我试图改变从字符串用户ID主键的默认类型为int 当我尝试使用自定义表名(所以User.MyUsers而不是dbo.AspNetUsers):

" 实体类型'IdentityUser'和'ApplicationUser'不能共享表'MyUsers',因为它们不在同一类型层次结构中,或者没有有效的一对一外键关系,它们之间具有匹配的主键. "

我可以成功地从字符串更改用户ID PK的默认类型为int或更改默认标识表的名称,但我不能两者都做在一起,没有击中这个错误.

我的解决方案基于:

1:从http://blogs.msdn.com/b/webdev/archive/2013/12/20/announcing-preview-of-microsoft-aspnet- "让用户和角色的主键类型可扩展"部分identity-2-0-0-alpha1.aspx.

2:如何在使用Visual Studio 2013 ASP.NET标识时更改表名?.

我的实际代码是:

using Microsoft.AspNet.Identity.EntityFramework;

namespace Musetone.Models
{
public class ApplicationUser : IdentityUser
{
}

public class CustomRole : IdentityRole
{
    public CustomRole() { }
    public CustomRole(string name) { Name = name; }
}

public class CustomUserRole : IdentityUserRole { }
public class CustomUserClaim : IdentityUserClaim { }
public class CustomUserLogin : IdentityUserLogin { }

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

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

        modelBuilder.Entity().ToTable("MyUsers", "User").HasKey(u => u.Id).Property(u => u.Id).HasColumnType("int");
        modelBuilder.Entity().ToTable("MyUsers", "User").HasKey(u => u.Id).Property(u => u.Id).HasColumnType("int");
        modelBuilder.Entity().ToTable("MyUserRoles", "User").HasKey(r => new { r.RoleId, r.UserId }).Property(r => r.UserId).HasColumnType("int");
        modelBuilder.Entity().ToTable("MyUserLogins", "User").HasKey(l => new { l.UserId, l.LoginProvider, l.ProviderKey }).Property(l => l.UserId).HasColumnType("int"); 
        modelBuilder.Entity().ToTable("MyUserClaims", "User").Property(c => c.UserId).HasColumnType("int"); 
        modelBuilder.Entity().ToTable("MyRoles", "User").HasKey(r => r.Id); 
    }
}
}

即使我删除HasColumnType("int"),我也会收到此错误.

任何帮助将不胜感激.

1 个回答
  • 我认为映射可能不正确.在定义ApplicationDbContext类时,您使用为泛型的角色,登录和声明定义的自定义类,但是传递用于映射表的基类.对于ChangePK示例,以下映射对我有用.如果这对您有用,请告诉我.映射应该足够简单

       protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
    
            modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers");
            modelBuilder.Entity<CustomUserRole>().ToTable("MyUserRoles");
            modelBuilder.Entity<CustomUserLogin>().ToTable("MyUserLogins");
            modelBuilder.Entity<CustomUserClaim>().ToTable("MyUserClaims");
            modelBuilder.Entity<CustomRole>().ToTable("MyRoles");
        }
    

    2023-01-19 10:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有