我只想使用 UserLoginsTable 和 UserTable ,而不是默认的5个表。因为我只有一个“用户”类型(管理员),并且没有其他表格。
我正在使用ASP MVC 5框架和Entity Framework 6( Code First 方法)。
如何在我的申请中实现这一目标?
答案 0 :(得分:0)
您可以像这样创建自己的User
继承IdentityUser
:
public class User : IdentityUser
{
}
然后您忽略了DbContext
中的其他类,包括原始IdentityUser
,包括您的用户DbSet
:
public class MyDbContext : IdentityDbContext
{
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// avoid some base class sets...
modelBuilder.Ignore<IdentityUser>();
modelBuilder.Ignore<IdentityUserRole>();
modelBuilder.Ignore<IdentityRole>();
modelBuilder.Ignore<IdentityUserClaim>();
// keep identity's original configurations for AspNetUsers and AspNetUserLogins
EntityTypeConfiguration<User> configuration = modelBuilder.Entity<User>().ToTable("AspNetUsers");
configuration.HasMany<IdentityUserLogin>(u => u.Logins).WithRequired().HasForeignKey(ul => ul.UserId);
IndexAttribute indexAttribute = new IndexAttribute("UserNameIndex")
{
IsUnique = true
};
configuration.Property((Expression<Func<User, string>>)(u => u.UserName)).IsRequired().HasMaxLength(0x100).HasColumnAnnotation("Index", new IndexAnnotation(indexAttribute));
configuration.Property((Expression<Func<User, string>>)(u => u.Email)).HasMaxLength(0x100);
modelBuilder.Entity<IdentityUserLogin>().HasKey(l => new { LoginProvider = l.LoginProvider, ProviderKey = l.ProviderKey, UserId = l.UserId }).ToTable("AspNetUserLogins");
}
}
我忽略原始IdentityUser
并创建自己的User
的原因是因为这个例外:
导航属性&#39;角色&#39;不是类型的声明属性 &#39; IdentityUser&#39 ;.确认未明确排除 模型,它是一个有效的导航属性。
我尝试使用modelBuilder.Entity<IdentityUser>().Ignore(u => u.Roles);
,但它没有解决,但如果有人知道如何解决这个问题,我们可以保持简单,我会很感激任何建议。
答案 1 :(得分:0)
当你运行add-migration“ApplicationDbContext”时,它会给你包含所有查询的迁移文件代码,你需要的是编写代码来删除其他4个表,如:
enable-migrations
add-migration "drop tables" //selected specific context
在迁移代码类
中记下以下代码DropTable("dbo.AspNetUserClaims");
DropTable("dbo.AspNetUserLogins");
DropTable("dbo.AspNetUserRoles");
DropTable("dbo.AspNetRoles");
最后运行以下命令
update-database