2013-07-01 27 views
5

Yeni ASP.NET MVC 5 Önizleme yayımlandığında, Kullanıcılar bağlamını/tablosunu nasıl yapılandırabilirim?Kullanıcılar bağlamı/tablosunu nasıl yapılandırabilirim?

MVC 4'te Sadece kendi Kullanıcı sınıfını kullanın ve sonra WebSecurity kendisine başlatmak işaret olur, bu Tike:

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

Ben Kullanıcılar sınıfa ek özellikler eklemek istediğiniz - nasıl?

cevap

1

Run için adımlar vardır, ama her zaman açılır ve kendi özel IUserStore Uygulama ve kendi içinde geçebilir DBContext.

İhtiyacınız olursa daha ayrıntılı bir örnek verebilirim.

+0

Gerçekten bir örnek görmek isterim. Kendi kendime uygulamayı denedim, ancak AntiFogeryToken'in başarısız olmasına sebep olan bazı kimlik sorunları ile sonuçlandı. Kendi Kullanıcı sınıfım için Microsoft.AspNet.Identity.IUser kullandığımda olur. – Martin

+0

@Hao Kung, Yukarıdan aşağı bir örnek görmek istiyorum. Ayrıca "MyUsers" için yeni tablodan kaçınmak istiyorum. Lütfen örnekte özel alanlara sahip Rol'leri ekleyebilir misiniz? – KidCoke

+0

@Hao Kung, bir örnek verir misiniz? – RezaRahmati

1

https://github.com/rustd/AspnetIdentitySample'dan bir örnek indirebilirsiniz. Bu, ASP.NET and Web Tools 2013 Preview Refresh ile birlikte gelen ASP.NET MVC şablonuna dayanmaktadır (Sadece VS2013 Önizlemesi'nin İngilizce sürümünü destekler) Yüklü Önizleme Yenilemesi yüklendikten sonra, ASP.NET Web Formları ve SPA uygulamaları için de aynısını yapabilirsiniz. Takip

bu projeyi

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 
UserStore ve Kullanıcı sınıfları daha kolay EF tabanlı uygulamaları olmak için vardır
+0

Bu örneği zaten görmüştüm, ancak bir MyUser oluşturuyor, Entity Frameworks kullanıcı sınıfını değil, kendi Kullanıcı sınıfımı gerçekten istiyorum. Bu yüzden yukarıdaki çözümü kullanırken veritabanında bir MyUsers tablosu alıyorum. – Martin

2

Ben Bu sorununuzu çözebilir, düşünüyorum:

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; 
    } 

} 

şimdi varsayılan eşleme değiştirebilirsiniz:


yılında Modeller kendi Kullanıcı modelini yeniden tanımlayabilirsiniz IdentityModels.cs \ OnModelCreating() geçersiz kılmayı ve ToTable() yöntemini kullanarak AspNet tabloları:

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"); 
    } 
} 

Son olarak veritabanında aşağıdaki tabloları göreceksiniz: Kullanıcı, Rol, USER_ROLE, User_Claim, USER_LOGIN yerine AspNetUsers, AspNetRoles, AspNetUsersRoles, AspNetUsersClaims, AspNetUserLogins.

Tabii Kullanıcı tablo ek alanları içerecektir: KullanıcıNo (int kimlik), İç, UserFullName ve USEREMAIL.

İlgili konular