2015-04-01 58 views
2

我是新的ASP.NET身份,並嘗試自定義創建新的MVC項目時提供的身份。使用自定義用戶而不是ASP.NET IdentityUser

ASP.NET身份自動創建幾個表來處理身份驗證和授權本身。

我的主要目標是創建用戶表,但其他人。我試着下面的代碼,以防止創建這些表:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Ignore<IdentityUserRole>(); 
     modelBuilder.Ignore<IdentityUserClaim>(); 
     modelBuilder.Ignore<IdentityRole>(); 
    } 

當我想創建一個用戶,以下錯誤返回:

的導航屬性「角色」是不是一個聲明的屬性上鍵入「 ApplicationUser」。驗證它是否未明確從模型中排除,並且它是有效的導航屬性。

我發現,內置的身份用戶結構如下:

IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string> 

我需要的是創造它不包含角色,要求等,我只是想自定義IdentityUser什麼表「用戶」時,我運行這個項目。

是否有可能創建我自己的IdentityUser或定製內置的?或者有什麼建議來創建「用戶」表並使用它?

非常感謝您的建議。

回答

1

這是我爲了得到一個解決方案所做的:

  • 我刪除了base.OnModelCreating
  • 然後我說順序忽略。

    //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>(); 
    

這樣做我最後的錯誤,它說:因爲它是由一個外鍵約束引用無法刪除對象「dbo.Role」。

爲此,我更改了移動DropTable(「dbo.Role」)的遷移。我知道這是黑客攻擊,但我沒有發現EF遷移如何將droptables語句移動到正確的順序。

Richard

+0

嗨理查德,謝謝你的回答。我前段時間通過定製內置用戶表解決了我的問題,但您的方法看起來很合理。當我開始下一個項目時,我會嘗試它。 – 2016-02-21 22:06:21

+0

太好了,希望這會有助於你的下一個項目 – 2016-03-03 04:15:38