而不是默認的5個表,我只想使用用戶登錄表和用戶表。因爲我只有一個'用戶'類型(管理員),並沒有其他表的要點。我使用的是ASP MVC 5框架和實體框架6(Code First方法)。使用ASP身份和2個表執行身份驗證
如何在我的應用程序中實現此目的?
而不是默認的5個表,我只想使用用戶登錄表和用戶表。因爲我只有一個'用戶'類型(管理員),並沒有其他表的要點。我使用的是ASP MVC 5框架和實體框架6(Code First方法)。使用ASP身份和2個表執行身份驗證
如何在我的應用程序中實現此目的?
您可以創建自己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
並創建了我的ow ñUser
是因爲此異常:
的導航屬性「角色」是不是 型「IdentityUser」聲明的屬性。確認它沒有被明確地從模型 中排除,並且它是有效的導航屬性。
我試過使用modelBuilder.Entity<IdentityUser>().Ignore(u => u.Roles);
但它沒有解決,但如果有人知道如何解決這個問題,我們可以保持簡單,我會很感激任何建議。
當您運行添加遷移「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
這不適用於自動遷移,雖然是一個簡單的解決方案。只要注意OP ** do **想要'AspNetUserLogins'。 – Alisson