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ı?
[Merge MyDbContext with IdentityDbContext] 'ın olası kopyası (http://stackoverflow.com/questions/19764233/merge-mydbcontext-with-identitydbcontext) – Arvand
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? –