我是ASP.NET身份的新手,并尝试自定义创建新MVC项目时提供的身份。
ASP.NET Identity会自动为句柄身份验证和授权创建一些表。
我的主要目标是创建用户表,但其他人。我尝试使用代码来防止创建这些表:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Ignore<IdentityUserRole>();
modelBuilder.Ignore<IdentityUserClaim>();
modelBuilder.Ignore<IdentityRole>();
}
当我想创建用户时,返回错误:
导航属性“Roles”不是“ApplicationUser”类型的声明属性。验证它是否未从模型中明确排除,并且它是有效的导航属性。
我发现内置的Identity用户具有以下结构:
IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>
我需要的是创建一个不包含角色,声明等的自定义IdentityUser。我只想在运行项目时使用“用户”表。
是否有可能创建自己的IdentityUser或自定义内置的IdentityUser?或者是否有任何建议只创建“用户”表并使用它?
非常感谢你的建议。
答案 0 :(得分:1)
这是我为了获得解决方案所做的:
然后我按此顺序添加了忽略。
//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>();
这样做我得到了一个最后的错误,它说:无法丢弃对象&#39; dbo.Role&#39;因为它是由FOREIGN KEY约束引用的。
为此我改变了移动DropTable的迁移(&#34; dbo.Role&#34;)。我知道这是黑客攻击,但我没有发现EF迁移如何将droptables句子移动到正确的顺序。
理查德