0

而不是默認的5個表,我只想使用用戶登錄表用戶表。因爲我只有一個'用戶'類型(管理員),並沒有其他表的要點。我使用的是ASP MVC 5框架和實體框架6(Code First方法)。使用ASP身份和2個表執行身份驗證

如何在我的應用程序中實現此目的?

回答

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並創建了我的ow ñUser是因爲此異常:

的導航屬性「角色」是不是 型「IdentityUser」聲明的屬性。確認它沒有被明確地從模型 中排除,並且它是有效的導航屬性。

我試過使用modelBuilder.Entity<IdentityUser>().Ignore(u => u.Roles);但它沒有解決,但如果有人知道如何解決這個問題,我們可以保持簡單,我會很感激任何建議。

0

當您運行添加遷移「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 
+0

這不適用於自動遷移,雖然是一個簡單的解決方案。只要注意OP ** do **想要'AspNetUserLogins'。 – Alisson

相關問題