2016-03-29 29 views
1

Şu anda, CompetentieContext adlı oluşturduğum bir tane diğeri de yalnızca ASP.net'in Kimlik çerçevesi tarafından ApplicationDBContext olarak adlandırılan iki DB Bağlamlarım var.ASP.NET kimliğini başka bir içeriğe taşıma

Her ikisinin de aynı bağlamda olmasına ihtiyacım var, ancak CompetentieContext'umu ApplicationDBContext veya nasıl değiştireceğimi bilmiyorum.

Aynı bağlamda onlara ihtiyacım var çünkü ASPID kullanıcılarının GUID'lerini Veritabanımdaki bir Tabloya bağlamanız gerekiyor.

Bu benim bağlam sınıf gibi görünüyor:

public class CompetentieContext : DbContext 
{ 
    public DbSet<Werknemer> Werknemer { get; set; } 
    public DbSet<Competentie> Competentie { get; set; } 
    public DbSet<CompetentieWerknemer> CompetentieWerknemer { get; set; } 
    public DbSet<CompetentieWerknemerDetail> CompetentieWerknemerDetail { get; set; } 
    public DbSet<Tag> Tag { get; set; } 
    public DbSet<TagGroupTag> TagGroupTag { get; set; } 
    public DbSet<TagGroup> TagGroup { get; set; } 
    public DbSet<CompetentieTag> CompetentieTag { get; set; } 

} 
+0

ilk: bu bir EF problemidir: ikincisi: GUID'leri kullanmak için her ikisini de aynı veritabanına/içeriğe getirmek zorunda değilsiniz – Carsten

cevap

1

Önce bir tablo WebUsers (ya da bir şey benzer) kendi veritabanında denilen oluşturun.

CREATE TABLE [dbo].[WebUsers](
    [Id] [uniqueidentifier] NOT NULL, 
    [SomeColumnName] [nvarchar](255) NOT NULL, 
    [FkSomethingInYourOwnDb] [uniqueidentifier] NULL, 
    [WebUserId] [nvarchar](128) NOT NULL, 
    ... 
    CONSTRAINT [PK_WebUsers] PRIMARY KEY CLUSTERED ([Id] ASC) ON [PRIMARY] 
) ON [PRIMARY] 

Not[AspNetUsers] birincil anahtar sütunu eşleştiren [WebUserId] sütun: Böyle bir şey olmalıdır.

Şimdi EF modeli/bağlamı güncelledikten sonra, IWebUserContext gibi bir şey denir bir soyutlamasını (bu hangi approach kullandığınız bağlıdır) ve uygulama HttpWebUserContext var:

public interface IWebUserContext 
{ 
    string Id { get; } 
} 

public class HttpWebUserContext : IWebUserContext 
{ 
    public string Id => HttpContext.Current.User.Identity.GetUserId(); 
} 

Sonraki kendi bağlam soyutlama oluşturabilir, en bu ICompetentieUserContext diyelim:

WebUserModel az önce oluşturduğumuz EF varlıktır
public interface ICompetentieUserContext 
{ 
    WebUserModel CurrentUser { get; } 
} 

. Uygulamanızın mimarisini bilmediğimden, bu soyutlamanın uygulanması tamamen size bağlıdır. Ancak, 'u ICompetentieUserContext uygulamasının içine enjekte etmek için Dependency Injection'u kullanabilirsiniz.

Ayrıca (ı Repository desen çeşit kullanmayı tercih ediyorum rağmen) doğrudan uygulamaya EF DBContext enjekte ve harita olabilir veritabanınızda birine geçerli WebUserContext 'ın Id.

+1

DI kapsayıcınız için, [Basit Enjektör] (https: //simpleinjector.org/index.html). Ayrıca [bu] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=91) ve [bu] (https://cuttingedge.it/blogs/steven/pivot/entry. php? id = 92) mimariniz için yararlı olabilir mi? – QuantumHive