2014-02-26 29 views
18

我跟着建議在this question重命名我的ASP.NET身份表:重複的外鍵更名ASP.NET身份表時

modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim"); 
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole"); 
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin"); 
modelBuilder.Entity<IdentityRole>().ToTable("Role"); 
modelBuilder.Entity<IdentityUser>().ToTable("User"); 
modelBuilder.Entity<ApplicationUser>().ToTable("User"); 

然而這會導致兩個屬性爲UserClaim到用戶的關係 - UserIdIdentityUser_Id

enter image description here

有沒有什麼辦法可以解決這個問題?

+1

一個外鍵一個主鍵問題是什麼? –

+1

這裏的問題是UserId字段應該是外鍵而不是自動生成的'IdentityUser_Id',因此與Users表的外鍵關係被破壞。我遇到過這個問題,但從來沒有設法逃脫它與我的自定義名稱的地方,我不得不恢復到默認名稱,,如果你想通了,請讓我知道,,,哦一件事我不能重新設置外鍵使用流利的API。 @MarkHomer – a7madx7

+1

@Mark'IdentityUser_Id'不應該在那裏,因爲它是'UserId'不必要的重複。 'UserId'應該是外鍵。 – Jonathan

回答

25

您應該跳過下面的行,然後它的工作原理非常清楚:

modelBuilder.Entity<IdentityUser>().ToTable("User"); 

所以你唯一需要的映射是:

modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim"); 
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole"); 
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin"); 
modelBuilder.Entity<IdentityRole>().ToTable("Role"); 
modelBuilder.Entity<ApplicationUser>().ToTable("User"); 

希望有所幫助。

+0

針對此問題的解決方案高低調和!工作完美,非常感謝 –

+0

在這方面花費了太多時間。我一直試圖添加我自己的外鍵,並不能相信這是一個簡單的改變。這[SO帖子](http://stackoverflow.com/questions/19460386/how-can-i-change-the-table-names-when-using-visual-studio-2013-aspnet-identi)讓我相信這是必需的。 –

+2

有[msdn博客](https://blogs.msdn.microsoft.com/webdev/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates /)(請參閱評論部分@Giang),該代碼示例介紹瞭如何重命名「AspNetUsers」表,我認爲很多人看到了這個表,這導致他們相信添加了'modelBuilder.Entity ()。ToTable(「User 「);'是正確的方式,實際上並非如此。 – kimbaudi