2016-04-02 23 views
5

Visual Studio'da varsayılan ASP.Net MVC şablonu kullanıyorum. Şablonda benim için oluşturulan ASP.Net Kimlik kodunu kullanıyorum. Ben ApplicationUser varlık (AspNetUser tablo) ve benim varlıkların geri kalanı arasındaki ilişkinin farkında olmak için kullandığım DBContext için istiyorum. Örneğin, ApplicationUser ve Message varlıkları arasındaki ilişkiyi gösteren bir ApplicationUser.Messages özelliğine sahip olmak istiyorum. Veri Erişim Katmanı projesinde tüm Kimlik olmayan varlıklar için DbContext'im var. Ve ApplicationDbContext şablonu UI Katmanındadır. Kimlik varlıkları ile özel varlıklarım arasındaki ilişkileri korumak için, bir DbContext ile birleşmem gerekiyor, değil mi? Bunu nasıl yaparım? İşte ASP.Net Kimliği Birleştirme DbContext benim DbContext

sahip olduğumun örnek kod:

IdentityUser ve DBContext benim özel mesajlar özelliğiyle MVC şablondan UI Katman projede benim için oluşturulan

:

public class ApplicationUser : IdentityUser 
{ 
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     // Add custom user claims here 
     return userIdentity; 
    } 

    public ICollection<Message> Messages { get; set; } 
} 

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

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

İleti sınıfı

public class Message 
{ 

    public int Id { get; set; } 

    [Required] 
    public string Title { get; set; } 

    [Required] 
    public string Body { get; set; } 

    [Required] 
    public DateTime Created { get; set; } 
} 

benim Veri Erişim Katmanı projesinde var DBContext: benim Alan/İş Mantığı Katmanı var

public class PSNContext : DbContext, IPSNContext 
{ 
    public PSNContext() 
     :base ("DefaultConnection") 
    { 
    } 

    public DbSet<Message> Messages { get; set; } 
} 

Benim İş Mantık Katmanı içine UI Katmanı ApplicationUser bunun gibi UI özel kodu getirmek hakkını hissetmez:

var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 

Bunu yapmak için daha iyi bir yolu var mı?

+0

[Merge MyDbContext with IdentityDbContext] 'ın olası kopyası (http://stackoverflow.com/questions/19764233/merge-mydbcontext-with-identitydbcontext) – Arvand

+0

Sorun doğru. Aynı konuyla yüzleşiyorum. DataAccess Katmanımda iki tane DbContexts, bir UI katmanında diğerini korumak istemiyorum. ASP.NET Kimlik sınıflarını DataLayer'a taşıdığımda, System.AspNet.Identity ad alanını DataLayer'a da taşımalıyım ve Veri Katmamın UI teknolojisinden bağımsız olmasını istiyorum. Veri Katmanında bir "AspNet" ad alanına sahip olmak doğru mu? –

cevap

1

Bu zaten bir mantık katmanına ApplicationUser hareketli getirmedi

here yanıtlandı, ben şahsen gayet düşünüyorum. Buradaki mantık, Web'e özgü ad alanlarını kullanmaz. Kullanılanlar Microsoft.AspNet.Identity ve System.Security.Claims ile ilgilidir. Bu örnekte ApplicationUser öğedir, web katmanınız kimlik doğrulama ve yetkilendirme için ClaimsPrincipal kullanmalıdır.

Örnek vermek isterseniz, önce previously done this birleştirme yapıyorum. İdeal bir durumda olmamasına rağmen, elde etmeye çalıştığınız şeylere örnek teşkil etmelidir.

İlgili konular