2013-07-01 65 views
5

隨着新的ASP.NET MVC 5預覽版發佈,我如何配置用戶上下文/表?如何配置用戶上下文/表?

在MVC 4我只想用我自己的用戶類,然後點WebSecurity初始化它,這題刻:

WebSecurity.InitializeDatabaseConnection(connectionString, "System.Data.SqlClient", userTableName, userIdColumn, userNameColumn, autoCreateTables); 

我想附加屬性添加到用戶類 - 怎麼樣?

回答

1

的UserStore和用戶類別有使基於EF實現更簡單的步驟,但你總是可以降下來,實現自己的自定義IUserStore,並通過在自己的的DbContext。

如果需要,我可以提供更詳細的示例。

+0

我真的很想看到一個例子。我試圖實現我自己的,但結束了一些索賠身份問題,導致AntiFogeryToken失敗。當我爲我自己的用戶類使用Microsoft.AspNet.Identity.IUser時會發生。 – Martin

+0

@霍恭,我想看一個自上而下的例子。我也想避免「MyUsers」的新表。您能否在示例中包含具有自定義字段的角色? – KidCoke

+0

@Hao Kung,你會舉一個例子嗎? – RezaRahmati

1

您可以從https://github.com/rustd/AspnetIdentitySample下載樣本。這是基於ASP.NET and Web Tools 2013 Preview Refresh附帶的ASP.NET MVC模板(僅支持英文版的VS2013 Preview)安裝此預覽刷新後,您可以對ASP.NET Web窗體和SPA應用程序執行相同的操作。

以下是運行這個項目

Open the solution 
Build and run 
Register a user ---- Notice that the user registration field only has user name and password 
Let's ask for a birthdate option from the user while registering an account. 
Goto Nuget Package Manager console and run "Enable-Migrations" 
Goto Models\AppModel.cs and uncomment BirthDate property in the MyUser class 
Goto Models\AccountViewModels.cs and uncomment BirthDate property in RegisterViewModel 
Goto AccountController and in Register Action and have the following code var user = new MyUser() { UserName = model.UserName,BirthDate=model.BirthDate }; //var user = new MyUser() { UserName = model.UserName }; 
Goto Views\Account\Register.cshtml and uncomment the HTML markup to add a BirthDate column 
Goto Nuget Package Manager console and run "Add-Migration BirthDate" 
Goto Nuget Package Manager console and run "Update-Database" 
Run the application 
When you register a user then you can enter BirthDate as well 
+0

我已經看到了這個例子,但它創建了一個MyUser,我真的想要我自己的User類,而不是Entity Frameworks用戶類。所以當使用上面的解決方案時,我會在數據庫中得到一個MyUsers表 - 這不是我們想要的。 – Martin

2

我想,這可以解決你的問題:


型號\ IdentityModels.cs你可以重新定義自己的用戶模式:

public class ApplicationUser : IdentityUser 
{ 
    /* identity field from database */ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 

    [Required] 
    public bool Internal { get; set; } 

    public string UserFullName { get; set; } 

    public string UserEmail { get; set; } 

    public ApplicationUser() 
     : base() 
    { 
     Internal = false; 
    } 

    public ApplicationUser(string userName) 
     : base(userName) 
    { 
     Internal = false; 
    } 

} 

現在,您可以更改默認的映射AspNet表使用OnModelCreating()覆蓋和ToTable()方法:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     // Change the name of the table to be Users instead of AspNetUsers 
     modelBuilder.Entity<IdentityUser>().ToTable("User"); 
     modelBuilder.Entity<ApplicationUser>().ToTable("User"); 

     modelBuilder.Entity<IdentityRole>().ToTable("Role"); 
     modelBuilder.Entity<IdentityUserClaim>().ToTable("User_Claim"); 
     modelBuilder.Entity<IdentityUserLogin>().ToTable("User_Login"); 
     modelBuilder.Entity<IdentityUserRole>().ToTable("User_Role"); 
    } 
} 

最後,你會在數據庫中看到如下表: 用戶,角色,USER_ROLE,User_Claim,USER_LOGIN代替AspNetUsers,AspNetRoles,AspNetUsersRoles,AspNetUsersClaims,AspNetUserLogins。

當然的用戶表將包含額外的字段:用戶ID (INT標識),內部UserFullNameUSEREMAIL

相關問題